Parent Window
-
Wozu ist es eigetnlich nötig, das Parent Window eines Dialogfeldes anzugeben? Nehmen wir mal an, wir haben ein Dialogfeld (nicht der Hauptdialog) und rufen von dem aus ein anderes Dialogfeld auf. Also, in CUnterdialog::OnButton () steht
CAndererUnterdialog dlg; dlg.DoModal ();bzw.
CAndererUnterdialog dlg (this); dlg.DoModal ();In der ersten Version wird ja der Parameter standardmäßig auf NULL gesetzt (in der Konstruktordeklaration steht, wenn man es nicht ändert, CAndererUnterdialog (CWnd *pParent=NULL)), was bedeutet, daß als Parent automatisch das Hauptfenster angebeben wird. Bei der zweiten Version habe ich dem Zeiger pParent explizit das erste Unterdialogfeld zugewiesen. Aber was ist da jetzt der praktisch relevante Unterschied? Wieso ist es überhaupt wichtig, daß ein Dialogfeld entweder dieses oder jenes Fenster als Parent hat?
-
Solange Du ein Mainframe hast und nur einen einfachen Dialog und aus diesem Dialog wieder nur einen neuen Dialog startest hast Du mit der Übergabe eines NULL Zeigers kein Problem. Die MFC versucht das aktuelle letzte Top-Level Fenster selbst zu ermitteln.
Gemein wird es wenn Du mehrere Floating Fenster hast (Dokable-Toolbars), oder nicht modale Dialoge, dann kommt manchmal das gute MFC ins schwitzen und nimmt gern ein floating window als Parent, dadurch wird evtl. das eigentliche Parent nicht disabled... Fatal.
Also wenn man weiß er das Parent gibt, dann sollte man es angeben. Aber wie gesagt in 99% aller Fälle geht es. Aber das letzte eine Prozent, dass hält uns Entwickler bekanntlich auf Trab.
