MFC: Funktiontn anderer Dialoge.

Stifthalter

Mitglied
Hi,

ich habe eine public funktion in meinem Main Dialog erstellt die ich von einem anderen dialog aus aufrufen will.
Das mach ich dann so:

Code:
CMainDlg MainDlg;

MainDlg.MeinFunktion();

Die Funktion führt unter anderem ein UpdateData() durch doch dabei bekomm ich jedes mal ne Fehlermeldung (wincore.cpp Zeile:3095).
Ich hab schon rausgefunden das das irgendwas mit den Fensternzu tun hat. Denn wenn ich die Funktion aus meinem MainWindow aufrufe funktionierts.

Mfg
M.B.
 
Solange ein Dialogfeld nicht existiert, kannst Du auch die UpdateData()-Funktion nicht verwenden. Existieren tut ein Dialog aber nur dann, wenn seine DoModal()-Funktion aufgerufen wurde, also er eben auch sichtbar ist.
 
Wenn ich meinen dialog mit ShowWindow(SW_HIDE) ausgeblendet hab dann existiert er doch noch im Hintergrund, oder nicht?

Und mein MainDialog existiert doch immer sonst würde doch die Anwendung beendet sein.
 
Na aus dem Zweizeiler da oben war das nun leider nicht erkennbar... :rolleyes:

Das Folgende ist hornalt, vielleicht hilfts aber trotzdem weiter:


DLGDATA.CPP Line 516 - Visual C++ 1.5 DLGDATA.CPP Line 491 - Visual C++ 1.0 DDX_Control()

ASSERT(!pDX->m_bSaveAndValidate);

This assert is caused by calling UpdateData() or UpdateData(TRUE) without calling UpdateData(FALSE) at least once first.

Make sure to call base class CFormView::OnInitialUpdate() or CDialog::OnInitDialog() to have such a call made, or make it yourself before calling UpdateData(TRUE).

 
ich erschaffe vom main dialog aus einen nichtmodalen neuen dialog von dem aus ich dann auf die funktionen oder auch edit controls des main windows zugreifen will.

muss ich da nicht irgendwie in dem neuen dialog ein objekt erstellen mit dem ich den main dialog steuern kann.
irgendwie ein CWnd objekt erstellen und dann mit attach() das handle vom main window benutzen oder so???
ich hab doch keine ahnung bin nochn blutiger anfänger :) :(.
 
Alles was Du brauchst, ist ein Zeiger auf den existierenden Dialog. Wenn Du in der vom Hauptdialog erzeugten Dialogfeldklasse eine neue Variable (=Instanz) der Hauptdialogfeldklasse anlegst, dann ist das eben nicht der Hauptdialog, sondern eine neue Instanz. (Nix gerafft?! :) )

Egal...^^...GetParent() sollte Deine Probleme lösen... Der Papa von Deinem Dialog ist der Hauptdialog, also kannst Du mit dem (gecasteten) Zeiger auf die public Variablen des Hauptdialogs zugreifen. Ungefähr so:

Code:
// irgendwo in Deinem Unterdialog

// maindlg enthält einen Zeiger auf das "Papafenster", also den Hauptdialog

CMainDlg* maindlg = (CMainDlg*) GetParent();

//auf PUBLIC-Element kann man dann so zugreifen

maindlg->variable = wert;

Du kannst nur auf public-Variablen zugreifen (klar, weil OOP). Ansonsten bekommst Du beim Compilieren einen Fehler...
 
Zurück