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 CDialog
abgeleiteten 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::OnCancel
nicht 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 new
sind. Modale Dialogfelder werden in der Regel auf dem Frame erstellt und benötigen PostNcDestroy
keine Bereinigung.
Weitere Informationen CDialog
finden Sie unter Dialogfelder.
Vererbungshierarchie
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 Hauptanwendungsfenster 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 Hauptanwendungsfenster 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 Hauptanwendungsfenster 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 Hauptanwendungsfenster 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 DoModal
werden 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 Hauptanwendungsfenster 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 CFileDialog
finden 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 CFileDialog
finden 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