Maximieren durch Doppelklick
-
Hallo,
ich bin noch Anfänger in Sachen Visual C++ .Ich habe eine Windows Form (FormBorderStyle: none) erstellt.
Wie kann ich verhindern, dass sich mein Programm, nach Doppelklick auf eine beliebige Stelle, automatisch vergrößert (Vollbild)?
Vielen Dank schonmal.
-
Huhu,
ich versteh leider deine Frage nicht.
Du hast also eine Form erstellt mit der Eigenschaft:
FormBorderStyle = None
Die kann man doch gar nicht mehr maximieren. Da die Leiste oben weg ist, sowie der Maximize-Button + Minimize-Button + Exit-Button.
Habe gerade eine Fensteranwendung mit der Maus erstochen,... nichts passiert, es sei denn, ich klicke auf die Leiste oben. (Getestet auf Win7)
-
Bei mir ist es so, dass wenn ich nen Doppelklick auf die Form mache,
sich die Windows Form vergrößert. Sprich mein eingestelltes Hintergrundbild
wird 4 mal angezeigt... vielleicht hängt es damit zusammen, dass ich Code eingebunden habe, um das Fenster verschieben zu können?!Danke
-
Huhu,
wird wohl mit hoher Wahrscheinlichkeit am Code liegen.
Zeig mal her was du da versuchst.
-
Also,
da durch FormBorderStyle none auch das Verschieben nicht mehr möglich ist,
habe ich Code hinzugefügt, der dafür sorgt, dass man die Form verschieben kann.Nur wie gesagt, wenn ich dann nen Doppelklick auf die Form mache, wird sie
automatisch maximiert. Ich hab es hinbekommen,
dass dies nicht geschieht, in dem ich Maximum und MinimumSize auf die Größe des Hintergrundbildes gesetzt habe...Das Problem an der Sache ist, dass ich StartPosition Center eingestellt habe
und das nach dem Doppelklick die Form oben links in der Ecke ist...Deswegen wäre es mir am liebsten, wenn man den Doppelklick ausstellen könnte.
Ich hoffe das ist einigermaßen verständlich...
// Fenster verschieben protected override void WndProc(ref Message m) { const int WM_NCHITTEST = 0x84; const int HTCLIENT = 0x01; const int HTCAPTION = 0x02; base.WndProc(ref m); if (m.Msg == WM_NCHITTEST && m.Result == (IntPtr)HTCLIENT) { m.Result = (IntPtr)HTCAPTION; } }
-
Ich bin mir nichst so sicher, gibt es eine Message, die ausgelöst wird wenn du im Nichtclientbereich doppelklickst, oder kannst du in Winproc das Doppelklick entsprechend abfangen (und ignorieren)?
-
Die Frage versteh ich leider nicht...
Könntest du Sie anders formulieren?
-
Du bist im falschen Forum, dass gehört in die MFC
-
Also es geht darum das ich das ganze wie minimieren, maximieren und schließen ausgemacht habe und habe es selbst gemacht durch buttons... Nun kommt das Problem wenn man durch doppel klick auf das Fenster drückt, verschiebt es sich nach links oben, und ich würde gerne dieses verhindern...
-
Falsch schrieb:
Du bist im falschen Forum, dass gehört in die MFC
Muss nicht sein. Ich tippe eher darauf, dass der Fragesteller eine WinForms Applikation hat und jetzt mit dem falschen Mittel (Windows Messages abfangen) irgendwas zu erreichen versucht.
Ich rate davon ab Anwendungen mit C++/CLI zu entwickeln. Besonders für Anfänger.
(C++/CLI eignet sich um die Brücke zwischen managed und unmanaged Code zu schlagen, nicht für "mehr".)
Simon
-
itap schrieb:
Die Frage versteh ich leider nicht...
Könntest du Sie anders formulieren?Wenn du mich meinst: Wieso fängst du nicht WM_NC*BUTTONDBLCLK ab?
protected override void WndProc(ref Message m) { /* ... */ // Achtung Psydocode! switch(m.Msg) { // Doppelclicks im Nichtclientbereich ignorieren: case WM_NCLBUTTONDBLCLK: case WM_NCMBUTTONDBLCLK: case WM_NCRBUTTONDBLCLK: m.Result = (IntPtr) HTNOWHERE; break; case WM_NCHITTEST: if(m.Result == (IntPtr)HTCLIENT) { m.Result = (IntPtr)HTCAPTION; } else base.WndProc(ref m); break; default: base.WndProc(ref m); } }
-
Habe es nun so versucht, aber er zeigt mir 4 Fehler an:
Fehler CS0103: Der Name "WM_NCLBUTTONDBLCLK" ist im aktuellen Kontext nicht vorhanden.
Fehler CS0103: Der Name "WM_NCMBUTTONDBLCLK" ist im aktuellen Kontext nicht vorhanden.
Fehler CS0103: Der Name "WM_NCRBUTTONDBLCLK" ist im aktuellen Kontext nicht vorhanden.
Fehler CS0103: Der Name "HTNOWHERE" ist im aktuellen Kontext nicht vorhanden.protected override void WndProc(ref Message m) { const int WM_NCHITTEST = 0x84; const int HTCLIENT = 0x01; const int HTCAPTION = 0x02; base.WndProc(ref m); if (m.Msg == WM_NCHITTEST && m.Result == (IntPtr)HTCLIENT) { m.Result = (IntPtr)HTCAPTION; } // Achtung Psydocode! switch (m.Msg) { // Doppelclicks im Nichtclientbereich ignorieren: case WM_NCLBUTTONDBLCLK: case WM_NCMBUTTONDBLCLK: case WM_NCRBUTTONDBLCLK: m.Result = (IntPtr)HTNOWHERE; break; case WM_NCHITTEST: if (m.Result == (IntPtr)HTCLIENT) { m.Result = (IntPtr)HTCAPTION; } else base.WndProc(ref m); break; default: base.WndProc(ref m); } }
Danke trotzdem bisher
-
Sag mal bitte womit Du arbeitest...
C++/CLI oder MFC.
Du mischt hier Code, dass ist nicht gut.
-
Ich denke ich arbeite mit Visual C# und Visual C++.
Ich habe es nicht im MFC bereich gepostet, da ich mit Windows Forms arbeite.Gruß
-
theta schrieb:
Falsch schrieb:
Du bist im falschen Forum, dass gehört in die MFC
Muss nicht sein. Ich tippe eher darauf, dass der Fragesteller eine WinForms Applikation hat und jetzt mit dem falschen Mittel (Windows Messages abfangen) irgendwas zu erreichen versucht.
Ich rate davon ab Anwendungen mit C++/CLI zu entwickeln. Besonders für Anfänger.
(C++/CLI eignet sich um die Brücke zwischen managed und unmanaged Code zu schlagen, nicht für "mehr".)
Simon...
-
Hey,
ist zwar shcon lange her, abe rich hatet gerade das selbe Problem, lässt sich lösen indem man die MaximizeBox des Fensters auf false stellt.
Dannach löst auch ein Doppelklick auch keine Maximierung mehr aus ;)#
MfG der gast