Entwickler-Ecke

WinForms - Winform Maximize event


Glowhollow - Mi 08.05.19 11:00
Titel: Winform Maximize event
Guten Morgen,

ich habe eine resize Funktion geschrieben und an der Mainform angeheftet. Ich konnte jedoch keine "Maximize" Property gefunden, wo ich die Resize funktion drauf anwenden kann.

Recherchen haben, folgendes Codesnippet geliefert.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
protected override void WndProc(ref Message m)
{
  if(m.Msg == 0x0112)
  {
    if (m.WParam == new IntPtr(0xF030))
    {
      Form1_Resize(thisnull);
    }
  }
  base.WndProc(ref m);
}


Das Event wird laut debugger auch getriggert, jedoch scheint es fast so, als würde das ganze nur dann richtig ausgeführt werden, wenn man vorher minimal die form resized, wenn man dann maximze drückt ist alles richtig. Trigger ich das event nicht an, scheint es fast so, als würde das irgendwie falsche daten bekommen. Es ist fast so, als würde das event garnicht gefeuert werden.

In meinem Resize event, setze ich relative position, der einzelnen Fenster und setzte die in Bezug zueinander. ich referenziere hier auch this.Width - aber es scheint so, als würde dies nicht geupdated.

Wie triggere ich das event richtig ?


Glowhollow - Mi 08.05.19 11:19

k, fehler gefunden. Hatte in der Resize Funktion, einen speziellen fall nicht abgefangen. Jetzt läufts. danke.


Th69 - Mi 08.05.19 11:20

Du hast den Code von Event when a window gets maximized/un-maximized [https://stackoverflow.com/questions/1295999/event-when-a-window-gets-maximized-un-maximized]?

Dann solltest du auch die Kommentare dort bzgl. wParam lesen, also die AND-Verknüpfung mittels 0xFFF0.
Aus WM_SYSCOMMAND [https://docs.microsoft.com/en-us/windows/desktop/menurc/wm-syscommand]:
Zitat:
In WM_SYSCOMMAND messages, the four low-order bits of the wParam parameter are used internally by the system. To obtain the correct result when testing the value of wParam, an application must combine the value 0xFFF0 with the wParam value by using the bitwise AND operator.

Aber warum nimmst du nicht einfach das Resize-Ereignis (bzw. die OnResize()-Methode) - wie auch im obigen Link vorgeschlagen?

PS: Du solltest keine Magic Numbers [https://de.wikipedia.org/wiki/Magische_Zahl_(Informatik)#Magische_Zahlen_in_Code] verwenden, sondern Konstanten dafür anlegen.


shubhupatil - Do 13.06.19 13:29

thanks for sharing...