Variablenübergabe
-
Wenn ich ein Dialogfeld basierendes Programm in MFC schreibe und öffne einen 2. Dialog(Fenster), wie kann ich Werte aus dem ersten Dialog "mitnehmen"?
Ich kann einfach nicht auf die Klasse von dem ersten Dialog zugreifen.
-
Übergib einfach den this-Pointer beim Konstruktor.
-
Das schönste ist Du übergibst die Werte im Konstruktor der besagten zweiten Klasse... Und falls Du was zurückgeben willst, solltest Du hierfür eine spezielle Funktion "GetDialogResults" (o.s.ä.) machen, die dann nach dem ShowDialog aufgerufen wird...
-
wie geht das mit den this ?
-
hm vielleicht solltest du estmal ein cpp-Tutorial durcharbeiten, anstatt gleich MFC zu machen? is net böse gemeint, soll ein ernsthafter Hinweis sein
-
Admiarlis schrieb:
wie geht das mit den this ?
// code in Dlg class 1 (z.B. CMyDialog1) CMyDialog2 dlg(this); dlg.DoModal();
// code in Dlg class 2 CMyDialog2 ::CMyDialog2 (CWnd* pParent /*=NULL*/) : CDialog(CMyDialog2 ::IDD, pParent){ //{{AFX_DATA_INIT(CMyDialog2 ) //}}AFX_DATA_INIT // m_pDlg ist Pointer von "class 1 (z.B. CMyDialog1)" m_pDlg = NULL; m_pDlg = (CMyDialog1*) CWnd; } void CMyDialog2::foo(){ m_pDlg->PublicFunktionVonKlasse1(); }
-
besten dank, jetzt funzt es
-
Warum casten wenn es nicht unbedingt erforderlich ist?
sky21 schrieb:
// code in Dlg class 2 CMyDialog2 ::CMyDialog2 (CMyDialog1* pParent /*=NULL*/) : CDialog(CMyDialog2 ::IDD, pParent)
-
Gut Frage.
Ich habe es auch immer wie sky21 gemacht. So ist es natürlich weniger Arbeit.
-
Jochen Kalmbach schrieb:
Warum casten wenn es nicht unbedingt erforderlich ist?
sky21 schrieb:
// code in Dlg class 2 CMyDialog2 ::CMyDialog2 (CMyDialog1* pParent /*=NULL*/) : CDialog(CMyDialog2 ::IDD, pParent)
Ich lasse eben gerne den Konstutorcode unangetastet
ne, keine Ahnung weshalb ich das so mache und erst später caste. Ist wohl einfach so