Steuerelementposition verändern
-
Reagiere doch einfach auf WM_SYSCOMMAND und dort auf SC_MAXIMIZE bzw. SC_RESTORE.
In der OnPaint brauchst Du dich damit eigentlich nicht rumschlagen.Edit: Achso, ich glaub ich hab Dich falsch verstanden, OnPaint() darf nie direkt aufgerufen werden. Den Aufruf erzwingt man durch Invalidate()
-
connan schrieb:
Edit: Achso, ich glaub ich hab Dich falsch verstanden, OnPaint() darf nie direkt aufgerufen werden. Den Aufruf erzwingt man durch Invalidate()
Wann muß ich denn Invalidate() aufrufen? In der OnPaint()-Methode?
-
Nein, Invalidate() sorgt für ein Neuzeichnen. Markiert das Fenster sozusagen für die nächste Nachricht WM_PAINT als überarbeitenswert.
Wenn Du diese Nachricht gleich selbst erzwingen willst:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cwnd.3a3a.updatewindow.asp
-
Ja das ist mir eigentlich auch klar. Ich habe doch aber einen zweiten Dialog in dem in OnInitDialog das Positionieren des Steuerelements drin steht. Sonst ist da ja nichts weiter. Und jetzt war die Frage, wie ich das jetzt beim normalisieren des Dialogs (vom Maximierten Fenster in das normale Fenster) wieder aufrufe.
-
Hi!
Vielleicht hilft Dir das auch weiter?
http://www.codeproject.com/dialog/RPResizeDlg.aspDie Klasse verwende ich nur noch wenn ich Dialoge mache bei
denen die Steuerelemente angepaßt werden sollen.
-
Du kannst OnInitDialog nicht ein zweites mal aufrufen. Lagere doch die Positionierung in eine Funktion aus, die kannst du dann in OnInit.. und beim Wiederherstellen aufrufen.
-
Ja und das ist jetzt wieder die Frage welche Meldung ist den das, das Wiederherstellen????
Wie gesagt, daß ist ein Modaler Unterdialog des Hauptdialogs.
Übrigens habe ich mal die Dialogklassen der zwei links versucht. Da gibt es aber überall kleinere Bugs, Schade!
-
connan schrieb:
Reagiere doch einfach auf WM_SYSCOMMAND und dort auf SC_MAXIMIZE bzw. SC_RESTORE.
-
Hatte ich schon wieder überlesen, danke. werde ich gleich mal ausprobieren.
-
Jetzt habe ich aber noch ein Problem:
Das Steuerelement wird jetzt erst gezeichnet wenn ich das Fenster bewege.
Wie kann ich das gleich bewerkstelligen?
-
Erhard Henkes schrieb:
Nein, Invalidate() sorgt für ein Neuzeichnen. Markiert das Fenster sozusagen für die nächste Nachricht WM_PAINT als überarbeitenswert.
Wenn Du diese Nachricht gleich selbst erzwingen willst:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cwnd.3a3a.updatewindow.asp
-
OK, jetzt funktioniert das soweit. Also Maximieren, wiederherstellen, Minimieren. Und sogar wenn ich das Fenster mit der Maus vergrößere.
Jetzt ist aber das Problem, daß wenn ich das Fenster soweit verkleinere, daß das Steuerelement nicht mehr zu sehen ist, muß ich wieder das Fenster bewegen, um das Steuerelement zu sehen.Da ist doch noch irgendwas nicht ganz richtig.
Edit: alles klar, habe das jetzt endlich hinbekommen, natürlich noch OnSize und dann Invalidate()
Vielen Dank für die vielen Antworten!!!!