Dialog soll anderen Dialog beenden ... det jeht nich ?!
-
Guten Tach...
... ich will folgendes:
Habe eine SDI-Anwendung mit CFormView.
Der MainFrame zeigt also den FormView mit der Menge Buttons. Jeder dieser
Buttons ruft einen Dialog auf.
Wird einer dier Dialoge gestartet (Zum Bsp. Dialog_A) wird der Schalter zu
Dialog_A inaktiv.
Drückt man auf den Button Dialog_B, soll Dialog_A aber geschlossen werden, bevor Dialog_B aufgerufen wird, damit nicht tausend Dialoge irgendwann mal offen sind. Aber ich krieg det alles nich hin.. Hilfeeee
Ich dank Euch...
-
Du erstellst die Dialoge mit Create, nicht DoModal, richtig?
Dann musst du doch irgendwo im View einen Zeiger auf den offenen Dialog haben. Und diesem Zeiger kannst du eine Nachricht schicken. Die musst du noch im Dialog empfangen und verarbeiten - schon isser zu.

Nachricht senden geht mit SendMessage.
Nachricht empfangen mit einem Eintrag in der MessageMapON_MESSAGE(WM_DEINE_MSG, OnDeineMsg)und der Funktion dazu
// afx_msg LRESULT OnUpdateTexte(WPARAM wParam, LPARAM pParam); LRESULT CMainFrame::OnUpdateTexte(WPARAM wParam, LPARAM pParam) { return 0; // Macht man wohl so, hab nicht nachgeschaut was es macht... }Beim Angucken welche Funktionen so ein Dialog dafür haben könnte, habe ich CloseWindow gefunden - das kannst du ja vorher mal versuchen. Spart ne Menge Aufwand...

-
ChSchade schrieb:
Habe eine SDI-Anwendung mit CFormView.
Drückt man auf den Button Dialog_B, soll Dialog_A aber geschlossen werden, bevor Dialog_B aufgerufen wird, damit nicht tausend Dialoge irgendwann mal offen sind..wie gehtn des???
du hast eine sdi-anwendung und öffnest mit buttons im hauptrahmen mehrere dialoge?!
bei meinen anwendungen kann ich nur im aktuellen dialog neue dialoge öffnen, und den aktuellen dialog auch nicht wechseln
ansonsten: jeder dialog braucht eben ne shutdownfunktion:
void CDialog1::Close() { CDialog::OnCancel(); }die funktion ist natürlich public

nachher:
in CDeinView:
m_poDialog1 = new CDialog1(); m_poDialog1->DoModal(); void OnButtonDialog2() { if (Dialog1 != NULL) { m_poDialog1->Close(); delete m_poDialog1(); m_poDialog1 = NULL; } m_poDialog2 = new CDialog2(); m_poDialog2->DoModal(); }die Dialoge sollten mit NULL initialisiert werden und nach dem schliessen (eigentlich sowieso) wieder NULL gesetzt werden
Esco
-
Du öffnest ja den Dialog auf Modal. Da kannst du auch keinen anderen öffenen aus von gerade geöffneten Dialog. Do MOdal kehrt erst zurück wenn der Dialog beendet wird.
Ein Nichtmodaler Dialog läuft selbständig. (Nicht verwechseln mit Threads)
-
@Esco - ich arbeite mit nicht-modalen Dialogen... da geht dat schon, so wie Unix-Tom sagt.
Ansonsten vieln Dank... hat mir weiter geholfen !