CDialog-Klasse

Die Basisklasse, die zum Anzeigen von Dialogfeldern auf dem Bildschirm verwendet wird.

Syntax

class CDialog : public CWnd

Member

Öffentliche Konstruktoren

Name Beschreibung
CDialog::CDialog Erstellt ein CDialog-Objekt.

Öffentliche Methoden

Name Beschreibung
CDialog::Create Initialisiert das CDialog-Objekt. Erstellt ein Dialogfeld ohne Modus und fügt es an das CDialog Objekt an.
CDialog::CreateIndirect Erstellt ein Dialogfeld ohne Modus aus einer Dialogfeldvorlage im Arbeitsspeicher (nicht ressourcenbasiert).
CDialog::D oModal Ruft ein modales Dialogfeld auf und gibt nach Abschluss des Vorgangs zurück.
CDialog::EndDialog Schließt ein modales Dialogfeld.
CDialog::GetDefID Ruft die ID des Standard-Pushbutton-Steuerelements für ein Dialogfeld ab.
CDialog::GotoDlgCtrl Verschiebt den Fokus auf ein angegebenes Dialogfeld-Steuerelement im Dialogfeld.
CDialog::InitModalIndirect Erstellt ein modales Dialogfeld aus einer Dialogfeldvorlage im Arbeitsspeicher (nicht ressourcenbasiert). Die Parameter werden gespeichert, bis die Funktion DoModal aufgerufen wird.
CDialog::MapDialogRect Konvertiert die Dialogfeldeinheiten eines Rechtecks in Bildschirmeinheiten.
CDialog::NextDlgCtrl Verschiebt den Fokus auf das nächste Dialogfeld-Steuerelement im Dialogfeld.
CDialog::OnInitDialog Überschreiben sie, um die Initialisierung des Dialogfelds zu erweitern.
CDialog::OnSetFont Überschreiben Sie die Schriftart, die ein Dialogfeld-Steuerelement verwenden soll, wenn es Text zeichnet.
CDialog::P revDlgCtrl Verschiebt den Fokus auf das vorherige Dialogfeld-Steuerelement im Dialogfeld.
CDialog::SetDefID Ändert das Standard-Pushbutton-Steuerelement für ein Dialogfeld in ein angegebenes Pushbutton-Steuerelement.
CDialog::SetHelpID Legt eine kontextabhängige Hilfe-ID für das Dialogfeld fest.

Geschützte Methoden

Name Beschreibung
CDialog::OnCancel Überschreiben, um die Schaltfläche "Abbrechen" oder die ESC-Tastenaktion auszuführen. Der Standardwert schließt das Dialogfeld und DoModal gibt IDCANCEL zurück.
CDialog::OnOK Überschreiben, um die Schaltflächenaktion "OK" in einem modalen Dialogfeld auszuführen. Der Standardwert schließt das Dialogfeld und DoModal gibt IDOK zurück.

Hinweise

Dialogfelder sind von zwei Typen: modal und moduslos. Ein modales Dialogfeld muss vom Benutzer geschlossen werden, bevor die Anwendung fortgesetzt wird. Ein Dialogfeld ohne Modus ermöglicht es dem Benutzer, das Dialogfeld anzuzeigen und zu einer anderen Aufgabe zurückzukehren, ohne das Dialogfeld abzubrechen oder zu entfernen.

Ein CDialog Objekt ist eine Kombination aus einer Dialogvorlage und einer CDialogabgeleiteten Klasse. Verwenden Sie den Dialogfeld-Editor, um die Dialogfeldvorlage zu erstellen und in einer Ressource zu speichern, und verwenden Sie dann den Assistenten zum Hinzufügen von Klassen, um eine von CDialog.

Ein Dialogfeld, wie jedes andere Fenster, empfängt Nachrichten von Windows. In einem Dialogfeld interessieren Sie sich besonders für die Behandlung von Benachrichtigungen aus den Steuerelementen des Dialogfelds, da dies der Benutzer mit Ihrem Dialogfeld interagiert. Verwenden Sie den Kurs-Assistenten , um auszuwählen, welche Nachrichten Sie behandeln möchten, und fügen Sie der Klasse die entsprechenden Nachrichtenzuordnungseinträge und Nachrichtenhandler-Memberfunktionen hinzu. Sie müssen nur anwendungsspezifischen Code in die Handlerelementfunktionen schreiben.

Wenn Es Ihnen lieber ist, können Sie Nachrichtenzuordnungseinträge und Memberfunktionen immer manuell schreiben.

Im gesamten, aber trivialsten Dialogfeld fügen Sie Ihrer abgeleiteten Dialogklasse Membervariablen hinzu, um daten zu speichern, die vom Benutzer in die Steuerelemente des Dialogfelds eingegeben wurden, oder um Daten für den Benutzer anzuzeigen. Sie können den Assistenten zum Hinzufügen von Variablen verwenden, um Membervariablen zu erstellen und diesen Steuerelementen zuzuordnen. Gleichzeitig wählen Sie einen Variablentyp und einen zulässigen Wertebereich für jede Variable aus. Der Code-Assistent fügt der abgeleiteten Dialogklasse die Membervariablen hinzu.

Eine Datenzuordnung wird generiert, um den Datenaustausch zwischen den Membervariablen und den Steuerelementen des Dialogfelds automatisch zu verarbeiten. Die Datenzuordnung stellt Funktionen bereit, die die Steuerelemente im Dialogfeld mit den richtigen Werten initialisieren, die Daten abrufen und die Daten überprüfen.

Um ein modales Dialogfeld zu erstellen, erstellen Sie mithilfe des Konstruktors für die abgeleitete Dialogklasse ein Objekt auf dem Stapel, und rufen DoModal Sie dann auf, um das Dialogfeld und die zugehörigen Steuerelemente zu erstellen. Wenn Sie ein Dialogfeld ohne Modus erstellen möchten, rufen Sie Create den Konstruktor Ihrer Dialogklasse auf.

Sie können auch eine Vorlage im Arbeitsspeicher erstellen, indem Sie eine DLGTEMPLATE-Datenstruktur verwenden, wie im Windows SDK beschrieben. Rufen Sie nach dem Erstellen eines CDialog Objekts CreateIndirect auf, um ein dialogfeld ohne Modus zu erstellen, oder rufen Sie InitModalIndirect und DoModal auf, um ein modales Dialogfeld zu erstellen.

Die Austausch- und Validierungsdatenzuordnung wird in einer Außerkraftsetzung geschrieben, die CWnd::DoDataExchange der neuen Dialogklasse hinzugefügt wird. Weitere Informationen zur Austausch- und Validierungsfunktionalität finden Sie in CWnd der DoDataExchange-Memberfunktion.

Sowohl der Programmierer als auch das Framework rufen indirekt über einen Aufruf von CWnd::UpdateData aufDoDataExchange.

Das Framework wird aufgerufen UpdateData , wenn der Benutzer auf die Schaltfläche "OK" klickt, um ein modales Dialogfeld zu schließen. (Die Daten werden nicht abgerufen, wenn auf die Schaltfläche "Abbrechen" geklickt wird.) Die Standardimplementierung von OnInitDialog ruft auch auf UpdateData , um die Anfangswerte der Steuerelemente festzulegen. Sie überschreiben OnInitDialog in der Regel, um Steuerelemente weiter zu initialisieren. OnInitDialog wird aufgerufen, nachdem alle Dialogfeldsteuerelemente erstellt wurden und unmittelbar vor der Anzeige des Dialogfelds.

Sie können jederzeit während der Ausführung eines modalen oder moduslosen Dialogfelds aufrufen CWnd::UpdateData .

Wenn Sie ein Dialogfeld manuell entwickeln, fügen Sie der abgeleiteten Dialogfeldklasse selbst die erforderlichen Membervariablen hinzu, und Sie fügen Memberfunktionen hinzu, um diese Werte festzulegen oder abzurufen.

Ein modales Dialogfeld wird automatisch geschlossen, wenn der Benutzer die Schaltflächen "OK" oder "Abbrechen" drückt oder wenn der Code die EndDialog Memberfunktion aufruft.

Wenn Sie ein Dialogfeld ohne Modus implementieren, setzen Sie die OnCancel Memberfunktion immer außer Kraft, und rufen Sie von dort aus auf DestroyWindow . Rufen Sie die Basisklasse CDialog::OnCancelnicht auf, da sie aufruft EndDialog, wodurch das Dialogfeld unsichtbar, aber nicht zerstört wird. Sie sollten auch für Dialogfelder ohne Modus außer Kraft setzen PostNcDestroy , um sie zu löschen this, da Dialogfelder ohne Modus in der Regel zugeordnet newsind. Modale Dialogfelder werden in der Regel auf dem Frame erstellt und benötigen PostNcDestroy keine sauber up.

Weitere Informationen CDialogfinden Sie unter Dialogfelder.

Vererbungshierarchie

CObject

CCmdTarget

CWnd

CDialog

Anforderungen

Header: afxwin.h

CDialog::CDialog

Um ein ressourcenbasiertes modales Dialogfeld zu erstellen, rufen Sie eine der beiden öffentlichen Formen des Konstruktors auf.

explicit CDialog(
    LPCTSTR lpszTemplateName,
    CWnd* pParentWnd = NULL);

explicit CDialog(
    UINT nIDTemplate,
    CWnd* pParentWnd = NULL);

CDialog();

Parameter

lpszTemplateName
Enthält eine mit Null beendete Zeichenfolge, die den Namen einer Dialogfeldvorlagenressource darstellt.

nIDTemplate
Enthält die ID-Nummer einer Dialogfeldvorlagenressource.

pParentWnd
Verweist auf das übergeordnete oder Besitzerfensterobjekt (vom Typ CWnd), zu dem das Dialogobjekt gehört. Wenn es NULL ist, wird das übergeordnete Fenster des Dialogfeldobjekts auf das Standard Anwendungsfenster festgelegt.

Hinweise

Eine Form des Konstruktors ermöglicht den Zugriff auf die Dialogressource anhand des Vorlagennamens. Der andere Konstruktor bietet Zugriff nach Vorlagen-ID-Nummer, in der Regel mit einem IDD_ Präfix (z. B. IDD_DIALOG1).

Um ein modales Dialogfeld aus einer Vorlage im Arbeitsspeicher zu erstellen, rufen Sie zuerst den parameterlosen, geschützten Konstruktor auf, und rufen Sie dann auf InitModalIndirect.

Nachdem Sie ein modales Dialogfeld mit einer der oben genannten Methoden erstellt haben, rufen Sie auf DoModal.

Verwenden Sie zum Erstellen eines Dialogfelds ohne Modus die geschützte Form des CDialog Konstruktors. Der Konstruktor ist geschützt, da Sie Ihre eigene Dialogfeldklasse ableiten müssen, um ein Dialogfeld ohne Modus zu implementieren. Das Erstellen eines Dialogfelds ohne Modus ist ein zweistufiger Prozess. Rufen Sie zuerst den Konstruktor auf; rufen Sie dann die Create Memberfunktion auf, um ein ressourcenbasiertes Dialogfeld zu erstellen, oder rufen Sie CreateIndirect auf, um das Dialogfeld aus einer Vorlage im Arbeitsspeicher zu erstellen.

CDialog::Create

Aufrufen Create , um ein Dialogfeld ohne Modus mithilfe einer Dialogfeldvorlage aus einer Ressource zu erstellen.

virtual BOOL Create(
    LPCTSTR lpszTemplateName,
    CWnd* pParentWnd = NULL);

virtual BOOL Create(
    UINT nIDTemplate,
    CWnd* pParentWnd = NULL);

Parameter

lpszTemplateName
Enthält eine mit Null beendete Zeichenfolge, die den Namen einer Dialogfeldvorlagenressource darstellt.

pParentWnd
Verweist auf das übergeordnete Fensterobjekt (vom Typ CWnd), zu dem das Dialogobjekt gehört. Wenn es NULL ist, wird das übergeordnete Fenster des Dialogfeldobjekts auf das Standard Anwendungsfenster festgelegt.

nIDTemplate
Enthält die ID-Nummer einer Dialogfeldvorlagenressource.

Rückgabewert

Beide Formulare geben einen Wert ungleich Null zurück, wenn die Erstellung und Initialisierung des Dialogfelds erfolgreich war; andernfalls 0.

Hinweise

Sie können den Aufruf Create innerhalb des Konstruktors platzieren oder ihn aufrufen, nachdem der Konstruktor aufgerufen wurde.

Zwei Formen der Create Memberfunktion werden für den Zugriff auf die Dialogfeldvorlagenressource durch den Vorlagennamen oder die Vorlagen-ID-Nummer (z. B. IDD_DIALOG1) bereitgestellt.

Übergeben Sie für beide Formulare einen Zeiger an das übergeordnete Fensterobjekt. Wenn pParentWnd NULL ist, wird das Dialogfeld mit dem übergeordneten fenster oder dem Besitzerfenster erstellt, das auf das Standard Anwendungsfenster festgelegt ist.

Die Create Memberfunktion wird unmittelbar nach dem Erstellen des Dialogfelds zurückgegeben.

Verwenden Sie die WS_VISIBLE Formatvorlage in der Dialogfeldvorlage, wenn das Dialogfeld angezeigt werden soll, wenn das übergeordnete Fenster erstellt wird. Andernfalls müssen Sie anrufen ShowWindow. Weitere Dialogfeldstile und deren Anwendung finden Sie in der DLGTEMPLATE-Struktur im Windows SDK und den Fensterformatvorlagen in der MFC-Referenz.

Verwenden Sie die CWnd::DestroyWindow Funktion, um ein von der Create Funktion erstelltes Dialogfeld zu zerstören.

Beispiel

void CMyDialog::OnMenuShowSimpleDialog()
{
   //m_pSimpleDialog initialized to NULL in the constructor of CMyDialog class
   m_pSimpleDlg = new CSimpleDlg();
   //Check if new succeeded and we got a valid pointer to a dialog object
   if (m_pSimpleDlg != NULL)
   {
      BOOL ret = m_pSimpleDlg->Create(IDD_SIMPLEDIALOG, this);

      if (!ret) //Create failed.
      {
         AfxMessageBox(_T("Error creating Dialog"));
      }

      m_pSimpleDlg->ShowWindow(SW_SHOW);
   }
   else
   {
      AfxMessageBox(_T("Error Creating Dialog Object"));
   }
}

CDialog::CreateIndirect

Rufen Sie diese Memberfunktion auf, um ein Dialogfeld ohne Modus aus einer Dialogfeldvorlage im Arbeitsspeicher zu erstellen.

virtual BOOL CreateIndirect(
    LPCDLGTEMPLATE lpDialogTemplate,
    CWnd* pParentWnd = NULL,
    void* lpDialogInit = NULL);

virtual BOOL CreateIndirect(
    HGLOBAL hDialogTemplate,
    CWnd* pParentWnd = NULL);

Parameter

lpDialogTemplate
Verweist auf den Arbeitsspeicher, der eine Dialogfeldvorlage enthält, die zum Erstellen des Dialogfelds verwendet wird. Diese Vorlage ist in Form einer DLGTEMPLATE-Struktur und Steuerelementinformationen, wie im Windows SDK beschrieben.

pParentWnd
Verweist auf das übergeordnete Fensterobjekt des Dialogfeldobjekts (vom Typ CWnd). Wenn es NULL ist, wird das übergeordnete Fenster des Dialogfeldobjekts auf das Standard Anwendungsfenster festgelegt.

lpDialogInit
Verweist auf eine DLGINIT-Ressource.

hDialogTemplate
Enthält ein Handle für den globalen Speicher, der eine Dialogfeldvorlage enthält. Diese Vorlage befindet sich in Form einer DLGTEMPLATE Struktur und daten für jedes Steuerelement im Dialogfeld.

Rückgabewert

Nonzero, wenn das Dialogfeld erstellt und erfolgreich initialisiert wurde; andernfalls 0.

Hinweise

Die CreateIndirect Memberfunktion wird unmittelbar nach dem Erstellen des Dialogfelds zurückgegeben.

Verwenden Sie die WS_VISIBLE Formatvorlage in der Dialogfeldvorlage, wenn das Dialogfeld angezeigt werden soll, wenn das übergeordnete Fenster erstellt wird. Andernfalls müssen Sie aufrufen ShowWindow , damit sie angezeigt wird. Weitere Informationen dazu, wie Sie andere Dialogfeldformatvorlagen in der Vorlage angeben können, finden Sie in der DLGTEMPLATE-Struktur im Windows SDK.

Verwenden Sie die CWnd::DestroyWindow Funktion, um ein von der CreateIndirect Funktion erstelltes Dialogfeld zu zerstören.

Dialogfelder, die ActiveX-Steuerelemente enthalten, erfordern zusätzliche Informationen, die in einer DLGINIT-Ressource bereitgestellt werden.

CDialog::D oModal

Rufen Sie diese Memberfunktion auf, um das modale Dialogfeld aufzurufen und das Dialogfeldergebnis zurückzugeben, wenn Sie fertig sind.

virtual INT_PTR DoModal();

Rückgabewert

Ein int Wert, der den Wert des nResult-Parameters angibt, der an die Memberfunktion "CDialog::EndDialog" übergeben wurde, die zum Schließen des Dialogfelds verwendet wird. Der Rückgabewert ist -1, wenn die Funktion das Dialogfeld nicht erstellen konnte, oder IDABORT, wenn ein anderer Fehler aufgetreten ist. In diesem Fall enthält das Ausgabefenster Fehlerinformationen von GetLastError.

Hinweise

Diese Memberfunktion behandelt alle Interaktionen mit dem Benutzer, während das Dialogfeld aktiv ist. Dies macht das Dialogfeld modal; d. h. der Benutzer kann erst dann mit anderen Fenstern interagieren, wenn das Dialogfeld geschlossen wird.

Wenn der Benutzer auf eines der Pushbuttons im Dialogfeld klickt, z. B. OK oder Abbrechen, wird eine Message-Handler-Memberfunktion, z . B. OnOK oder OnCancel, aufgerufen, um zu versuchen, das Dialogfeld zu schließen. Die Standardmäßige OnOK Memberfunktion überprüft und aktualisiert die Dialogfelddaten und schließt das Dialogfeld mit Ergebnis-IDOK, und die Standardelementfunktion OnCancel schließt das Dialogfeld mit Ergebnis-IDCANCEL, ohne die Dialogfelddaten zu überprüfen oder zu aktualisieren. Sie können diese Nachrichtenhandlerfunktionen überschreiben, um ihr Verhalten zu ändern.

Hinweis

PreTranslateMessage wird jetzt für die verarbeitung modaler Dialogfeldnachrichten aufgerufen.

Beispiel

void CMyDialog::OnMenuShowAboutDialog()
{
   // Construct the dialog box passing the
   // ID of the dialog template resource
   CDialog aboutDlg(IDD_ABOUTBOX);

   // Create and show the dialog box
   INT_PTR nRet = -1;
   nRet = aboutDlg.DoModal();

   // Handle the return value from DoModal
   switch (nRet)
   {
   case -1:
      AfxMessageBox(_T("Dialog box could not be created!"));
      break;
   case IDABORT:
      // Do something
      break;
   case IDOK:
      // Do something
      break;
   case IDCANCEL:
      // Do something
      break;
   default:
      // Do something
      break;
   };
}

CDialog::EndDialog

Rufen Sie diese Memberfunktion auf, um ein modales Dialogfeld zu beenden.

void EndDialog(int nResult);

Parameter

nResult
Enthält den Wert, der vom Dialogfeld an den Aufrufer zurückgegeben DoModalwerden soll.

Hinweise

Diese Memberfunktion gibt nResult als Rückgabewert von DoModal. Sie müssen die Funktion verwenden, um die EndDialog Verarbeitung abzuschließen, wenn ein modales Dialogfeld erstellt wird.

Sie können jederzeit auch in OnInitDialog aufrufenEndDialog, in diesem Fall sollten Sie das Dialogfeld schließen, bevor es angezeigt wird oder bevor der Eingabefokus festgelegt wird.

EndDialog schließt das Dialogfeld nicht sofort. Stattdessen wird ein Flag festgelegt, mit dem das Dialogfeld geschlossen wird, sobald der aktuelle Nachrichtenhandler zurückgegeben wird.

Beispiel

void CMyDialog::OnMenuShowSimpleModal()
{
   CSimpleDlg myDlg;
   INT_PTR nRet = myDlg.DoModal();

   if (nRet == IDOK || nRet == 5)
   {
      AfxMessageBox(_T("Dialog closed successfully"));
   }
}

 

void CSimpleDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
   UNREFERENCED_PARAMETER(nFlags);
   // Do something

   int nRet = point.x; // Just any value would do!
   EndDialog(nRet);    // This value is returned by DoModal!

   // Do something

   return; // Dialog closed and DoModal returns only here!
}

CDialog::GetDefID

Rufen Sie die GetDefID Memberfunktion auf, um die ID des Standard-Pushbutton-Steuerelements für ein Dialogfeld abzurufen.

DWORD GetDefID() const;

Rückgabewert

Ein 32-Bit-Wert ( DWORD). Wenn die Standardtaste einen ID-Wert aufweist, enthält das Wort mit hoher Reihenfolge DC_HASDEFID und das Wort mit niedriger Reihenfolge den ID-Wert. Wenn für die Standardtaste kein ID-Wert vorhanden ist, lautet der Rückgabewert 0.

Hinweise

Dies ist in der Regel eine SCHALTFLÄCHE "OK".

CDialog::GotoDlgCtrl

Verschiebt den Fokus auf das angegebene Steuerelement im Dialogfeld.

void GotoDlgCtrl(CWnd* pWndCtrl);

Parameter

pWndCtrl
Identifiziert das Fenster (Steuerelement), das den Fokus erhält.

Hinweise

Um einen Zeiger auf das Steuerelement (untergeordnetes Fenster) abzurufen, das als pWndCtrl übergeben werden soll, rufen Sie die CWnd::GetDlgItem Memberfunktion auf, die einen Zeiger auf ein CWnd-Objekt zurückgibt.

Beispiel

Sehen Sie sich das Beispiel für CWnd::GetDlgItem an.

CDialog::InitModalIndirect

Rufen Sie diese Memberfunktion auf, um ein modales Dialogfeldobjekt mithilfe einer Dialogfeldvorlage zu initialisieren, die Sie im Arbeitsspeicher erstellen.

BOOL InitModalIndirect(
    LPCDLGTEMPLATE lpDialogTemplate,
    CWnd* pParentWnd = NULL,
    void* lpDialogInit = NULL);

    BOOL InitModalIndirect(
    HGLOBAL hDialogTemplate,
    CWnd* pParentWnd = NULL);

Parameter

lpDialogTemplate
Verweist auf den Arbeitsspeicher, der eine Dialogfeldvorlage enthält, die zum Erstellen des Dialogfelds verwendet wird. Diese Vorlage ist in Form einer DLGTEMPLATE-Struktur und Steuerelementinformationen, wie im Windows SDK beschrieben.

hDialogTemplate
Enthält ein Handle für den globalen Speicher, der eine Dialogfeldvorlage enthält. Diese Vorlage befindet sich in Form einer DLGTEMPLATE Struktur und daten für jedes Steuerelement im Dialogfeld.

pParentWnd
Verweist auf das übergeordnete oder Besitzerfensterobjekt (vom Typ CWnd), zu dem das Dialogobjekt gehört. Wenn es NULL ist, wird das übergeordnete Fenster des Dialogfeldobjekts auf das Standard Anwendungsfenster festgelegt.

lpDialogInit
Verweist auf eine DLGINIT-Ressource.

Rückgabewert

Nonzero, wenn das Dialogobjekt erstellt und erfolgreich initialisiert wurde; andernfalls 0.

Hinweise

Um ein modales Dialogfeld indirekt zu erstellen, weisen Sie zuerst einen globalen Speicherblock zu, und füllen Sie es mit der Dialogfeldvorlage aus. Rufen Sie dann den leeren CDialog Konstruktor auf, um das Dialogfeldobjekt zu erstellen. Rufen Sie als Nächstes auf InitModalIndirect , um Das Handle in der Speicherdialogfeldvorlage zu speichern. Das Windows-Dialogfeld wird erstellt und später angezeigt, wenn die DoModal-Memberfunktion aufgerufen wird.

Dialogfelder, die ActiveX-Steuerelemente enthalten, erfordern zusätzliche Informationen, die in einer DLGINIT-Ressource bereitgestellt werden.

CDialog::MapDialogRect

Aufrufen, um die Dialogfeldeinheiten eines Rechtecks in Bildschirmeinheiten zu konvertieren.

void MapDialogRect(LPRECT lpRect) const;

Parameter

lpRect
Verweist auf eine RECT-Struktur oder ein CRect-Objekt, das die zu konvertierenden Dialogfeldkoordinaten enthält.

Hinweise

Dialogfeldeinheiten werden in Bezug auf die aktuelle Basiseinheit des Dialogfelds angegeben, die von der durchschnittlichen Breite und Höhe von Zeichen in der Schriftart abgeleitet ist, die für Dialogfeldtext verwendet wird. Eine horizontale Einheit ist ein Viertel der Basisbreiteneinheit des Dialogfelds, und eine vertikale Einheit ist ein Achtel der Basishöheneinheit des Dialogfelds.

Die GetDialogBaseUnits Windows-Funktion gibt Größeninformationen für die Systemschriftart zurück, Sie können jedoch für jedes Dialogfeld eine andere Schriftart angeben, wenn Sie die DS_SETFONT Formatvorlage in der Ressourcendefinitionsdatei verwenden. Die MapDialogRect Windows-Funktion verwendet die entsprechende Schriftart für dieses Dialogfeld.

Die MapDialogRect Memberfunktion ersetzt die Dialogfeldeinheiten in lpRect durch Bildschirmeinheiten (Pixel), sodass das Rechteck verwendet werden kann, um ein Dialogfeld zu erstellen oder ein Steuerelement innerhalb eines Felds zu positionieren.

CDialog::NextDlgCtrl

Verschiebt den Fokus auf das nächste Steuerelement im Dialogfeld.

void NextDlgCtrl() const;

Hinweise

Wenn sich der Fokus auf dem letzten Steuerelement im Dialogfeld befindet, wird er zum ersten Steuerelement verschoben.

CDialog::OnCancel

Das Framework ruft diese Methode auf, wenn der Benutzer auf "Abbrechen" klickt oder die ESC-Taste in einem modalen oder moduslosen Dialogfeld drückt.

virtual void OnCancel();

Hinweise

Überschreiben Sie diese Methode, um Aktionen auszuführen (z. B. das Wiederherstellen alter Daten), wenn ein Benutzer das Dialogfeld schließt, indem Sie auf "Abbrechen" klicken oder auf die ESC-Taste drücken. Standardmäßig wird ein modales Dialogfeld geschlossen, indem EndDialog aufgerufen wird und DoModal IDCANCEL zurückgibt.

Wenn Sie die Schaltfläche "Abbrechen" in einem Dialogfeld ohne Modus implementieren, müssen Sie die OnCancel Methode außer Kraft setzen und "DestroyWindow" darin aufrufen. Rufen Sie die Basisklassenmethode nicht auf, da sie aufruft EndDialog, wodurch das Dialogfeld unsichtbar, aber nicht zerstört wird.

Hinweis

Sie können diese Methode nicht außer Kraft setzen, wenn Sie ein CFileDialog Objekt in einem Programm verwenden, das unter Windows XP kompiliert wird. Weitere Informationen CFileDialogfinden Sie unter CFileDialog Class.

Beispiel

void CSimpleDlg::OnCancel()
{
   // TODO: Add extra cleanup here

   // Ensure that you reset all the values back to the
   // ones before modification. This handler is called
   // when the user doesn't want to save the changes.

   if (AfxMessageBox(_T("Are you sure you want to abort the changes?"),
                     MB_YESNO) == IDNO)
   {
      // Give the user a chance if he has unknowingly hit the
      // Cancel button. If he says No, return. Don't reset. If
      // Yes, go ahead and reset the values and close the dialog.
      return;
   }

   m_nMyValue = m_nPrevValue;
   m_pMyString = NULL;

   CDialog::OnCancel();
}

CDialog::OnInitDialog

Diese Methode wird als Reaktion auf die WM_INITDIALOG Nachricht aufgerufen.

virtual BOOL OnInitDialog();

Rückgabewert

Gibt an, ob die Anwendung den Eingabefokus auf eines der Steuerelemente im Dialogfeld festgelegt hat. Wenn OnInitDialog "nonzero" zurückgegeben wird, legt Windows den Eingabefokus auf die Standardposition fest, das erste Steuerelement im Dialogfeld. Die Anwendung kann 0 nur zurückgeben, wenn sie den Eingabefokus explizit auf eines der Steuerelemente im Dialogfeld festgelegt hat.

Hinweise

Windows sendet die WM_INITDIALOG Nachricht während der Aufrufe "CreateIndirect" oder "DoModal" an das Dialogfeld, die unmittelbar vor der Anzeige des Dialogfelds auftreten.

Überschreiben Sie diese Methode, wenn Sie eine spezielle Verarbeitung ausführen möchten, wenn das Dialogfeld initialisiert wird. Rufen Sie in der überschriebenen Version zuerst die Basisklasse OnInitDialog auf, ignorieren Sie jedoch den Rückgabewert. Sie werden in der Regel von Der überschriebenen Methode zurückgegeben TRUE .

Windows ruft die OnInitDialog Funktion mithilfe der standardmäßigen globalen Dialogfelderprozedur auf, die allen Dialogfeldern der Microsoft Foundation-Klassenbibliothek gemeinsam ist. Sie ruft diese Funktion nicht über Ihre Nachrichtenzuordnung auf, daher benötigen Sie keinen Nachrichtenzuordnungseintrag für diese Methode.

Hinweis

Sie können diese Methode nicht außer Kraft setzen, wenn Sie ein CFileDialog Objekt in einem Programm verwenden, das unter Windows Vista oder höher kompiliert wird. Weitere Informationen zu Änderungen CFileDialog unter Windows Vista und höher finden Sie unter CFileDialog Class.

Beispiel

BOOL CSimpleDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   // TODO: Add extra initialization here
   m_cMyEdit.SetWindowText(_T("My Name")); // Initialize control values
   m_cMyList.ShowWindow(SW_HIDE);          // Show or hide a control, etc.

   return TRUE; // return TRUE unless you set the focus to a control
   // EXCEPTION: OCX Property Pages should return FALSE
}

CDialog::OnOK

Wird aufgerufen, wenn der Benutzer auf die Schaltfläche "OK " klickt (die Schaltfläche mit einer IDOK-ID).

virtual void OnOK();

Hinweise

Überschreiben Sie diese Methode, um Aktionen auszuführen, wenn die Schaltfläche "OK " aktiviert wird. Wenn das Dialogfeld die automatische Datenüberprüfung und den Austausch enthält, überprüft die Standardimplementierung dieser Methode die Dialogfelddaten und aktualisiert die entsprechenden Variablen in Ihrer Anwendung.

Wenn Sie die Schaltfläche "OK" in einem dialogfeld ohne Modus implementieren, müssen Sie die OnOK Methode außer Kraft setzen und "DestroyWindow" darin aufrufen. Rufen Sie die Basisklassenmethode nicht auf, da sie EndDialog aufruft, wodurch das Dialogfeld unsichtbar, aber nicht zerstört wird.

Hinweis

Sie können diese Methode nicht außer Kraft setzen, wenn Sie ein CFileDialog Objekt in einem Programm verwenden, das unter Windows XP kompiliert wird. Weitere Informationen CFileDialogfinden Sie unter CFileDialog Class.

Beispiel

void CSimpleDlg::OnOK()
{
   // TODO: Add extra validation here

   // Ensure that your UI got the necessary input
   // from the user before closing the dialog. The
   // default OnOK will close this.
   if (m_nMyValue == 0) // Is a particular field still empty?
   {
      // Inform the user that he can't close the dialog without
      // entering the necessary values and don't close the
      // dialog.
      AfxMessageBox(_T("Please enter a value for MyValue"));
      return;
   }

   CDialog::OnOK(); // This will close the dialog and DoModal will return.
}

CDialog::OnSetFont

Gibt die Schriftart an, die ein Dialogfeld-Steuerelement beim Zeichnen von Text verwendet.

Virtual void OnSetFont(CFont* pFont);

Parameter

pFont
[in] Gibt einen Zeiger auf die Schriftart an, die als Standardschriftart für alle Steuerelemente in diesem Dialogfeld verwendet wird.

Hinweise

Das Dialogfeld verwendet die angegebene Schriftart als Standard für alle zugehörigen Steuerelemente.

Der Dialogfeld-Editor legt in der Regel die Schriftart des Dialogfelds als Teil der Ressourcen für Dialogfeldvorlagen fest.

Hinweis

Sie können diese Methode nicht außer Kraft setzen, wenn Sie ein CFileDialog Objekt in einem Programm verwenden, das unter Windows Vista oder höher kompiliert wird. Weitere Informationen zu Änderungen CFileDialog unter Windows Vista und höher finden Sie unter CFileDialog Class.

CDialog::P revDlgCtrl

Legt den Fokus auf das vorherige Steuerelement im Dialogfeld fest.

void PrevDlgCtrl() const;

Hinweise

Wenn sich der Fokus auf dem ersten Steuerelement im Dialogfeld befindet, wird er zum letzten Steuerelement im Feld verschoben.

CDialog::SetDefID

Ändert das Standard-Pushbutton-Steuerelement für ein Dialogfeld.

void SetDefID(UINT nID);

Parameter

Nid
Gibt die ID des Pushbutton-Steuerelements an, das zum Standard wird.

CDialog::SetHelpID

Legt eine kontextabhängige Hilfe-ID für das Dialogfeld fest.

void SetHelpID(UINT nIDR);

Parameter

nIDR
Gibt die kontextabhängige Hilfe-ID an.

Siehe auch

MFC-Beispiel-DLGCBR32
MFC-Beispiel-DLGTEMPL
CWnd-Klasse
Hierarchiediagramm