Funktion aufrufen
-
moin
ich hab ein dialogfenster in dem ich ein zweites dialogfenster über einen Button aufrufe.
nun möchte ich eine funktion des zweiten Dialogfensters vom 1ten aufrufen.mit folgenden Quellcode wird zwar das fenster geöffnet , sonst passiert jedoch weiter nichts, beim schließen erscheint ne Fehlermeldung.
void CHugoDlg::OnButton1()
{
CWTabelleDLG v_tabelle;
v_tabelle.DoModal();
v_tabelle.setTable(); // hier nur testweise,kommt später noch woanders in
}Die Funktion wird aus dem 2ten Dialogfenster ausber ausgeführt.
Wie müßte das aussehen?
-
Also ich blick jetz zwar da nich so ganz durch, kann dir aber vielleicht ne allgemeine lösung geben. Also wenn du z.B. in dialog 2 bist Mach einfach ne variable CMyDialog1 und ruf dann mit meineDialogVariable.MeineFunktion() die Funktion auf. Oder is dein problem damit noch nich gelöst?
MFG
Hansi
-
naja das funktioniert schon.
der Aufruf
v_tabelle.setTable(); // hier nur testweise,kommt später noch woanders insoll später woanders im stehen
das das ganze momentan übern button realisiert ist, ist nur testweise.Also mal ausführlich was geplant ist:
Das 1te Dialogfenster besitzt einen Timer der u.a. dann die Funktion setTable(...) aufrufen soll (die Funktion bekommt noch parameter), um ein Listenelement im 2ten Dialogfenster zeilenweise zu erweitern.Rufe ich setTable direkt aus dem zweiten Dialogfeld auf, passiert ja auch das was soll.
jma
-
OK ich glaub ich weiß was du meinst bei mir gehts nämlich auch net ich habs grad probiert. Aber damit bin ich überfragt sorry...
MFG
Hansi
-
v_tabelle.DoModal(); hält das Programm an dieser Stelle an und startet das Nachrichtensystem des neuen Dialogfeldes. Da immer nur an einer Stelle Code ausgeführt wird, kommt der Aufruf v_tabelle.setTable(); erst nachdem das Dialogfeld wieder geschlossen wurde. Der Timer nützt dir im ersten Dialogfeld kaum etwas, da die Standard-Schleife ja so lange unterbrochen ist (diese ruft dann auch die Timer-Funktion auf). Du kannst ja auch das 1. Dialogfeld nicht mehr anklicken...
Wenn du zwei Dialogfelder gleichzeitig verwenden willst, dann kannste ja mehere Threads benutzen.
Ich hoffe, ich habe dir weitergeholfen.
-
Hi
Wie Frauke schon sagte, kehrt die Methode DoModal erst zurück wenn der Dialog geschlossen wurde. Alternativ zu DoModal, kannst du den Dialog als nicht modalen Dialog anzeigen. Wichtig ist dabei dass du im Resourceneditor für den Dialog die Eigenschaft visible auf true setzt. Dann kannst du den Dialog mittels der Memberfunktion Create erzeugen.
//--------- snip ------- //m_dlg ist ein zeiger auf eine instanz deines dialogs, die schon erzeugt wurde if(!m_dlg->GetSafeHwnd()) m_dlg->Create(IDD_NICHTMODALDIALOG); //------- snap ---------Nun ist dein Dialog nicht modal und du kannst so arbeiten wie du es vor hattest.
-
schick doch eine benutzerdefinierte message an deinen 2.dialog.
der timer im ersten arbeitet nämlich auch, wenn dein 2.dialog modal angezeigt wird.
sende im ontimer vom ersten dialog eine message an den 2. und nimm die message im 2.dialog in die messagemap auf.....