In MDIChild den Befehl wsMaximized abfangen
-
Hallo,
ich habe ein Programm geschrieben in MDIForm. Nur wen ich in den MDIChild auf Maximieren gehe setzt er das in den ganzen MDIForm rein und die TForm.BorderIcons sind dann in MainMenu.
Meine Frage ist kann man das unterbinden oder abfangen? Das er das ganze im MDIForm macht, aber das Icon(biMaximize) soll aber Activ bleiben.
Ich habe zwar schon was versucht
void __fastcall TMDIChild::FormResize(TObject *Sender) { if (WindowState == wsMaximized) WindowState = wsNormal; }
Die TForm.BorderIcons blinkt kurz auf im MainMenu und dann ist der Rahmen vom Haupt Programm weg und setzt das falsch.
Ich Programmiere mit C++Builder XE3 und hoffe es kann mir einer Helfen.
-
Stichwort WM_NCHITTEST. Damit kannst du das drücken des Maximaze Buttons abfangen:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645618(v=vs.85).aspx
-
Sorry das ich das jetzt wieder erwecke.
Aber ich bekomme das nicht hin
Und zwarprivate: void __fastcall WMNCHitTest(TWMNCHitTest& Message); public: BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_NCHITTEST, TWMNCHitTest, WMNCHitTest) END_MESSAGE_MAP(TForm) ... void __fastcall TMDIChild::WMNCHitTest(TWMNCHitTest& Message) { switch (Message.Msg) { case WM_NCHITTEST: if (Message.Result == HTMAXBUTTON) { // Er springt hier nicht rein } } }
Result ist immer '0' und man kann die Buttons Minimiert, Maximiert und Schließen nicht anklicken. Irgend was fehlt weiß aber nicht was.
-
MESSAGE_HANDLER
schreibt:Any function specified in a MESSAGE_HANDLER macro must be defined as follows:
LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-
@Swordfish: Dies ist aber ein VCL-Code nicht ATL, s.a. Frage zu MESSAGE_HANDLER(...).
BTW: Warum sind eigentlich deine ganzen Themen in der Forentechnik gelöscht?
-
@rave173 :
Er kann da auch nicht reinspringen, weil die Aufgabe von WM_NCHITTEST das Ermitteln der Schaltfläche ist, auf der der Mauszeiger steht.
Du musst dazu die "Original" Routine aufrufen:void __fastcall TMDIChild::WMNCHitTest(TWMNCHitTest& Message) { switch (Message.Msg) { case WM_NCHITTEST: TForm::WndProc(Message); if (Message.Result == HTMAXBUTTON) { } } }
-
Erst mal danke für die Antworten,
Ich habe das jetzt anders gemacht kam mit TForm::WndProc(Message); nicht zurecht
MESSAGE_HANDLER(WM_NCLBUTTONDOWN, TMessage, WMNCHitTest) ... switch (Message.Msg) { case WM_NCLBUTTONDOWN: if (Message.WParam == HTMAXBUTTON) { ... code ... } break; }
läuft oder kann es Probleme damit geben?
-
@th69 sagte in In MDIChild den Befehl wsMaximized abfangen:
Dies ist aber ein VCL-Code nicht ATL
Wow. Hab nicht gewusst daß die Macrodingens dort auch so heißen.