2 Fragen
-
Hi MFCs,
ich habe 2 Fragen an euch.- Was macht UpdateData()? Hab in der MSDN nachgeschaut (nicht gepeilt) und die Suchfunktion benutzt (nichts gefunden)
- Kann man sich die MFC-Referenz der MSDN irgendwo herunterladen?
-
Das findet man hier:
http://mitglied.lycos.de/ehenkes/mfc_einsteigerbuch_kapitel2.htmHier ein Auszug:
"void CMultiplizierenDlg::OnButton1() { UpdateData(TRUE); // Felder --> Variablen m_Ausgabe = m_Eingabe1 * m_Eingabe2; UpdateData(FALSE); // Variablen --> Felder }
Prägen Sie sich diese Kombination gut ein:
UpdateData( TRUE ) transferiert Daten aus den Steuerelementen in die Variablen.
UpdateData( FALSE ) transferiert Daten aus den Variablen in die Steuerelemente....
Auslöser für die Member-Funktion DoDataExchange(...) ist die Member-Funktion UpdateData(). Beide Funktionen gehören zur MFC-Klasse CWnd. Die exakte Syntax für UpdateData lautet:
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
Wenn Sie mehr über DDX und DDV wissen möchten, dann schauen Sie z.B. in die "Technical Note 26" (TN026: DDX and DDV Routines, siehe dort insbesondere Abschnitt "How Does It Work?") im MSDN."
-
Warum sietst du mich?
Sag doch du. Bitte!
UpdateData( TRUE ) transferiert Daten aus den Steuerelementen in die Variablen.
UpdateData( FALSE ) transferiert Daten aus den Variablen in die Steuerelemente.Was für Variablen? Tschuldige, wenn ich so doof frage, aber woher weiß der Compiler denn, welche Variablen mit welchen Steuerelementen verbunden sind?
-
MSDN findet man z.B.
- auf 2 CDs als Beigabe zu MS VC++ Ver. 6
- oder online:
http://www.microsoft.com/germany/msdn/
-
"Warum sietst du mich? Sag doch du. Bitte!"
War doch nur ein Auszug aus meinem Tutorial. Dort benutze ich natürlich Sie. Also kein persönliches Problem.
Deine letzte Frage ist interessant. Nehmen wir das Beispiel mit der formatierten Uhrzeit-Ausgabe:
void CTimeDlg::OnTimer(UINT nIDEvent) { CTime curTime = CTime::GetCurrentTime(); m_sTime = curTime.Format("%H:%M:%S %A, %B %d, %Y"); UpdateData(FALSE); CDialog::OnTimer(nIDEvent); }
Dort findet man m_sTime. Dieser String ist verbunden mit IDC_EDIT1.
Aber wo genau? Hier:void CTimeDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTimeDlg) DDX_Text(pDX, IDC_EDIT1, m_sTime); //}}AFX_DATA_MAP }
Das läuft in MSVC++ übrigens sehr einfach mittels Klassen-Assistent. Der schreibt diesen Code automatisch.
Die entscheidende Zeile ist:
DDX_Text(pDX, IDC_EDIT1, m_sTime);..
-
Hier der "DDX-DDV"-Link zur TN026:
-
Danke, Erhardt.
-
Gern geschehen.