Freigeben über


Dialog-Datenaustausch

Wenn Sie den DDX-Mechanismus verwenden, legen Sie die Anfangswerte der Membervariablen des Dialogfeldobjekts fest, in der Regel im Handler oder im OnInitDialog Dialogkonstruktor. Unmittelbar vor der Anzeige des Dialogfelds überträgt der DDX-Mechanismus des Frameworks die Werte der Membervariablen an die Steuerelemente im Dialogfeld, wo sie angezeigt werden, wenn das Dialogfeld selbst als Reaktion auf DoModal oder Createangezeigt wird. Die Standardimplementierung von OnInitDialog in CDialog ruft die Mitgliedsfunktion UpdateData der Klasse CWnd auf, um die Steuerelemente im Dialogfeld zu initialisieren.

Derselbe Mechanismus überträgt Werte von den Steuerelementen an die Membervariablen, wenn der Benutzer auf die Schaltfläche "OK" klickt (oder wenn Sie die UpdateData Memberfunktion mit dem Argument TRUE aufrufen). Der Überprüfungsmechanismus für Dialogdaten überprüft alle Datenelemente, für die Sie Gültigkeitsprüfungsregeln angegeben haben.

Die folgende Abbildung zeigt den Austausch von Dialogdaten.

Diagramm des Datenmodells und des Datenaustauschs im Dialogfeld
Dialog-Datenaustausch

UpdateData funktioniert in beide Richtungen, wie vom BOOL-Parameter angegeben, der an ihn übergeben wird. Um den Austausch durchzuführen, richtetUpdateData ein CDataExchange-Objekt ein und ruft die Überschreibung der CDialog-Memberfunktiom DoDataExchange durch Ihre Dialogklasse auf. DoDataExchange verwendet ein Argument vom Typ CDataExchange. Ein an CDataExchange übergebenes UpdateData Objekt stellt den Kontext des Austauschs dar und definiert Informationen wie die Richtung des Austauschs.

Wenn Sie (oder ein Code-Assistent) DoDataExchange überschreiben, geben Sie pro Datenmitglied (Steuerelement) einen Aufruf einer DDX-Funktion an. Jede DDX-Funktion weiß, wie Daten in beide Richtungen basierend auf dem Kontext, der durch das CDataExchange-Argument von DoDataExchange an Ihr UpdateData übergeben wird, ausgetauscht werden.

MFC bietet viele DDX-Funktionen für verschiedene Arten von Austausch. Das folgende Beispiel zeigt ein DoDataExchange Überschreiben, in dem zwei DDX-Funktionen und eine DDV-Funktion aufgerufen werden:

void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVal);
   DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
   DDV_MaxChars(pDX, m_strName, 20);
}

Die DDX_ und DDV_-Linien sind eine Datenzuordnung. Die dargestellten DDX- und DDV-Beispielfunktionen sind für ein Kontrollkästchen-Steuerelement bzw. ein Bearbeitungsfeld-Steuerelement vorgesehen.

Wenn der Benutzer ein modales Dialogfeld abbricht, beendet die OnCancel Memberfunktion das Dialogfeld und DoModal gibt den Wert IDCANCEL zurück. In diesem Fall werden keine Daten zwischen dem Dialogfeld und dem Dialogobjekt ausgetauscht.

Siehe auch

Dialogdatenaustausch und Validierung
Arbeiten mit Dialogfeldern in MFC
Dialogdatenüberprüfung