Zwei Dialogfelder: Nur das zweite ist sichtbar
-
Ich habe eine Dialogfeldanwendung und wenn man auf einen Button klickt, geht ein zweites Dialogfeld auf und das erste aus. Wenn man dieses beendet, wird das erste wieder sichtbar.
Also:
CMeinDialog::OnButton1() { CZweitesDialogfeld dlg; this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW); }
Mein Problem ist nur: Das erste Dialogfeld ist mit der Schaltfläche in der Startleiste verbunden. Wenn es unsichtbar wird, verschwindet für diesen Zeitpunkt auch diese Schaltfläche und ich kann das Programm natürlich nicht mehr durch die Startleiste anklicken.
Wie kann man das verhindern?
-
der this zeiger ist überflüssig
wenn du anstatt ShowWindow die größe des fensters einfach auf 0 reduzierst dürfte es klappen:void CDlgDlg::OnButton1() { CZweitesDialogfeld dlg; CRect rect; GetWindowRect(rect); MoveWindow(0,0,0,0); dlg.DoModal(); MoveWindow(rect); }
-
Er könnte auch einfach im Resourcen Editor das "Anwendungsfenster" flag aktivieren.
-
Es wird immer der Dialog in der Taskleiste angezeigt, der dem member m_pMainWnd deiner Applikationsklasse zugewiesen ist.
Vielleicht kannst du darüber was machen
-
noch einfacher ist es, wenn du deinen Code wiefolgt abänderst:
CMeinDialog::OnButton1() { CZweitesDialogfeld dlg; this->ShowWindow(SW_SHOWMINIMIZED); dlg.DoModal(); this->ShowWindow(SW_SHOWNORMAL); }
greetz
Horst
-
obei ich da eher noch ein ShowWindow(SW_HIDE) vor das minimieren setzen würde, mir dauert das minimieren einfach zu lange
-
Zu ShowWindow(SW_SHOWMINIMIZED): Hätte dann der Benutzer nicht die Möglichkeit, unten auf die Schaltfläche zu klicken und es wieder zu maximieren? Na gut, das zweite Dialogfeld ist modal, also wäre das möglicherweise doch nicht möglich.
Ach ja, da fällt mir ein: Wenn nur noch der zweite Dialog zu sehen ist, soll natürlich der mit der Startschalfläche steuerbar sein(minimieren/maximieren).Die Version mit MoveWindow(0,0,0,0) wirkt auf mich wieder wie so eine Hackerversion. Außerdem dürfte das Problem mit dem Minimieren und Maximieren des zweiten Dialogfelds auch hier auftreten. (Ich kann es im Moment leider nicht ausprobieren, erst heut abend wieder zu Hause.)
Er könnte auch einfach im Resourcen Editor das "Anwendungsfenster" flag aktivieren.
Das muß ich mal ausprobieren.
Es wird immer der Dialog in der Taskleiste angezeigt, der dem member m_pMainWnd deiner Applikationsklasse zugewiesen ist.
Das wäre vielleicht auch eine Möglichkeit.
Um Euch mal die Hintergründe zu erläutern: Es geht darum, daß das Programm drei verschiedene, voneinander unabhängige Anwendungen/funktionalitäten beherrscht. Stellt Euch beispielsweise einen einfachen Texteditor, einen Taschenrechner und ein Minispielchen vor. Am Anfang erscheint ein Dialog mit drei Buttons zum Anwählen. Wenn man einen anklickt, soll dieses Dialogfeld ausgehen und das gewählte "Programm" (das Dialogfeld mit der Funktionalität) völlig eingenständig laufen (also mit Leiste unten im Startmenü). Wird es geschlossen, kommt wieder das Titeldialogfeld und man wählt sich etwas anderes oder das gleiche aus.
Es soll nicht möglich sein, zwei oder mehr der drei "Anwendungen" zu öffnen. Und ich will auch nicht drei zusätzliche Exe-Dateien schreiben, die durch das Hauptprogramm aufgerufen werden.
Also: Zwei der genannten Vorschläge (m_pMainWnd und Ressourceneditor) klingen schon ganz gut. Wenn es aber trotz allem noch eine Möglichkeit gibt, wie man das standardmäßig und "offiziell" macht, dann wäre es schön, wenn er es hier posten könnte. Ansonsten probier ich mal die zwei Versionen aus.