dialog boxen
-
Hi.
Ich lerne zur Zeit die Winap und stecke irgendwie zwischen Dialogboxen und Steuerelementen fest. Meine Frage ist eigentlich ziemlich simpel. Kann ich Dialogboxen fest in meinem Hauptfenster integrieren, oder rufe ich die nur als extra Fenster auf, das ich dann wild durch die Gegend verschiebe?
-
Also es gibt ja 2 verschiedene Typen von Dialog-Boxen:
1. modale (unterbricht das Programm solange, bis der User den Dialog geschlossen hat), 2. nicht-modale (läuft parallel zum Programm...damit ist es also "wild durch die Gegend" verschiebar) Dialoge.
Erstere werden durch die Funktion DialogBox (ist übrigens nur ein Makro für DialogBoxParam) unter Angabe des Parent-Fensters erzeugt, falls eine Parent-Child-Hiercharie erwünscht ist, letztere durch CreateDialog.
Ist Deine Frage damit beantwortet ?
-
Was meinst Du denn mit "fest integrieren"? Du kannst natürlich einen nicht-modalen Dialog sofort bei WM_CREATE aufrufen und an einer festen Stelle des Hauptfensters positionieren (WM_MOVE in der DialogProc abfangen und die Position mit MoveWindow() oder SetWindowPos() auf die alte Stelle setzen).
-
Also die erste Sache ist, das ich gerne den Ressorcen Editor von Visual Studio benutzen würde und da kann man ja so weit ich gesehen hab nur Dialogboxen erstellen.
Im Programm soll die Dialogbox ihren festen Standort haben. Wie z.B. unter Visual Studio an der linken Seite der Projektmappen Explorer. Das das ganze verschiebbar und andockbar ist, ist dann vielleicht ein späteres Ziel. erstmal will ich nur so eine Dialogbox fest an einen Ort binden.
Also Ich hab per WM_CREATE CreateDialog benutzt. Aber wie kann ich dem jetzt sagen wo das hinsoll und das das nicht verschiebbar sein soll?
-
Das Dialogfenster vorab positionieren geht nur, wenn Du CreateWindowEx benutzt. CreateDialog greift auf diese Funktion zurück, setzt aber die Fensterkoordinaten selbst ein.
Anderer Vorschlag: Bevor der Dialog angezeigt wird, bekommt die DialogProc eine WM_INITDIALOG-Nachricht. Normalerweise werden bei dieser Nachricht die Buttons ect. erstellt. Du kannst aber mit MoveWindow() die Psoition der Dialogboxfestlegen. Dann, wie oben schon geschrieben, WM_MOVE- bzw. WM_MOVING-Nachrichten abfangen und die Koordinaten mit MoveWindow() oder SetWindowPos() auf die alten Werte zurücksetzen.