DoModal Ärger :-/
-
Hallo
...habe eine Dialogbasierte Anwendung. Von diesem Haupdialog (HD) besteht die Möglichkeit, mittels Tastenklick einen "Themen-Hauptdialog" (TH)aufzurufen. JEder solcher Themandialog hat mit ein paar eingebettete Unterdialoge (in einem Tab-Controller). Diese Subdialoge sind nicht vom Hauptdialog (HD), aber vom jeweiligen TH abgeleitet.
Versuche es mittels primitiver Grafik darzustellen
HD | -------|------- | | | TH TH TH // TH NICHT abgeleitet von HD | -------|------- | | | SD SD SD // SDs abgleitet von TH
Der Hauptdialog besitzt Funktionen, welche dennoch für alle Subdialoge verfügbar sein müssen.
z.B. eine Funktion welche ein Benutzeranmeldedialog aufruft:
bool CCSTDlg::askToLogin(CDialog* pWnd){ CDlg_UsrLog dlg(this); dlg.DoModal();}
NBei Ausführung des obestehenden Codes ist es so, dass DoModal auf den Dialog HD gültig ist, der Benutzer kann also die Box ignorieren, wenn er auf einen Bereich ausserhalb des neuen Fensters klickt (das Fenster wird überdeckt durch das neu fokussierte Fenster, z.B. klick auf TH1).
Frage:
Wie kann ich erzwingen, dass das neue Fenster modal zu TH ist, obschon der Aufruf in HD erfolgt?
-
hm wenn der Hauptdialog seine UNterdialoge kennt, kannst du sie mit EnableWindow deaktivieren
-
Ich hab die reihenfolge nicht ganz verstanden:
Du hast einen Hauptdialog, Aus dem rufst du (modale?) Themendialoge auf und da wieder (modale?) Subdialoge
wo rufst du nun die Loginabfrage auf? im HD, oder im TD?
-
Also wenn du mehrere Dialog hast die du deaktiviert haben willst, in Folge eines modalen Dialoges, musst du einige "per Hand" deaktivieren, weil der Modale Dialog nur seinen Elterndialog sperrt, nicht aber andere vorhandene.
-
Taelan schrieb:
Ich hab die reihenfolge nicht ganz verstanden:
Du hast einen Hauptdialog, Aus dem rufst du (modale?) Themendialoge auf und da wieder (modale?) Subdialoge
wo rufst du nun die Loginabfrage auf? im HD, oder im TD?
Nein nicht ganz: Jeder Themendialog besitzt ein Tab-Control. Innerhalb des Tab-Controlls sind dann weitere Subdialoge enthalten.
Bsp: Themendialog wäre "Tier", innerhalb des Dialoges hats dann Registerkarten mit den Dialogen "Pferd", "Esel", usw.
Diese Dialoge sind von "Tier" abgeleitet.Der Code für die Loginabfrage ist im Hauptdialog HD. (Kommuniziert wird über SendMessage)
-
Es macht keinen Sinn einen Dialog von einem Anderen Abzuleiten,
wenn der ParentDialog schon irgendeine Darstellung enthält.
Evtl. um sachen wiederzuverwenden oder zu ergänzen, aber das wäre
imho eine Ausnahme.Funktionen wie die AskForLogin() solltest du am besten in eine
Eigenständige Klasse tun, da dies nicht zum Aufgabenbereich des
Hauptdialoges gehört.phlox
-
phlox81 schrieb:
Es macht keinen Sinn einen Dialog von einem Anderen Abzuleiten,
wenn der ParentDialog schon irgendeine Darstellung enthält.
Evtl. um sachen wiederzuverwenden oder zu ergänzen, aber das wäre
imho eine Ausnahme.Funktionen wie die AskForLogin() solltest du am besten in eine
Eigenständige Klasse tun, da dies nicht zum Aufgabenbereich des
Hauptdialoges gehört.phlox
HA du hast recht, meine Subdialoge sind gar nicht vom Themendialog abgleitet.. zui ui ui, ein dickes sorry! Aber die ausgangslage und das Problem besteht dennoch
-
Pellaeon schrieb:
hm wenn der Hauptdialog seine UNterdialoge kennt, kannst du sie mit EnableWindow deaktivieren
Eine simple Lösung die Funktioniert. Danke!