Dialog ungebunden aufrufen
-
Hallo zusammen,
bisher rufe ich den MFC Dialog mit dlg.DoModal() auf, also gebunden. Das Programm steht im Hintergrund, bis der Dialog wieder beendet wurde.
Nun möchte ich aber den Dialog ungebunden aufrufen, d.h., das Programm soll im Hintergrund weiterlaufen.
Wie lautet die entsprechende Funktion?
Vielen Dank
schöne Grüße
Marcel
-
Das nennt man einen nicht-modalen (modeless) Dialog. Früher gab es dafür sogar die MFC-Klassen CDialog und CModalDialog. Heute unterscheidet man die "Modalität" innerhalb der Klasse CDialog:
Man schafft eine Ressource (hier: IDD_MYDIALOG),
erzeugt eine von CDialog abgeleitete Klasse (hier: CMyDialog), erzeugt ein Objekt auf dem Heap und ruft mit dem zurückgelieferten Zeiger (Member-Varriable CMyDialog* m_pMyDlgPtr;) Create(...) und ShowWindow(...) auf. Der letzte Befehl ist nicht notwendig, wenn die Ressource auf "Sichtbar" gesetzt ist:void C_XXX_Dlg::OnModelessDialogStart() { m_pMyDlgPtr = new CMyDialog; m_pMyDlgPtr->Create(IDD_MYDIALOG); m_pMyDlgPtr->ShowWindow(SW_SHOWNORMAL); }Dann sollte das klappen.

-
Hallo Erhard,
es funktioniert.
Ich wollte mich nochmal herzlich für deine (eure) freundliche, sachliche und kompetente Unterstützung bedanken.
Was würde ich nur ohne euch tun?Schöne Grüße,
Marcel
-
hi,
is zwar schon etwas älter das thema, ich hät da aber noch ne frage zu...mein Dialog is jetzt wunderbar nichtmodal. Jetzt will ich ihn an winamp anhängen, sozusagen winamp als Parent.
Ich habs mit Create(IDD_MYDIALOG, pWinamp); (pWinamp ist ein Pointer auf Winamp _) versucht, allerdings kriege ich da immer ein error beim starten.
Wenn ich es so machen:
CGen_EnqeueDlg dlg(&pWinamp);
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
funzt es auch, nur leider ist der Dialog dann modal und winamp nimmt keine Befehle mehr entgegen.
-
Keiner ne ahnung wie/ob das geht? Ich bin am verzweifeln *G*