Entwickler-Ecke

WinForms - Raisen einer WM_NCHITTEST-Message zur Form-WndProc


Kasko - Mi 03.03.21 09:03
Titel: Raisen einer WM_NCHITTEST-Message zur Form-WndProc
Einfache Frage:

Ich möchte ein randloses Formular mit veränderbarer Größe erstellen. Also verwende ich die WM_NCHITTEST-Message und setze das Result auf HTTOPLEFT, HTLEFT, .... Dies funktioniert wie erwartet, wenn ich über keine Control hover. Wenn ich jedoch zum Beispiel ein Panel erstelle und Dock auf Top setze, wird der WndProc nur aufgerufen, wenn ich den Mauszeiger nicht über das Panel bewege, da Control.WndProc des Panels aufgerufen wird, sodass HTTOPLEFT, HTTOPRIGHT und HTTOP nicht mehr möglich sind.

Ist es möglich, die Messages an das Formular weiterzureichen? Ich möchte auch die Standard-Controls unterstützen. Ich möchte also nicht die Steuerelemente ableiten und deren WndProc überschreiben.


Th69 - Mi 03.03.21 10:31

Es ist doch gerade Sinn der ganzen NC-(Nonclient-)Nachrichten, daß diese nur für Bereiche außerhalb des Clientbereichs (d.h. außerhalb der Controls) aufgerufen werden, s.a. Nonclient Area [https://docs.microsoft.com/en-us/windows/win32/gdi/nonclient-area].

Wenn du ein rahmenloses Fenster verschieben lassen möchtest: Making a Borderless Form Movable [https://www.codeproject.com/Articles/349883/Making-a-Borderless-Form-Movable] sowie Make a borderless form movable? [https://stackoverflow.com/questions/1592876/make-a-borderless-form-movable]
Und zum Verändern der Größe: Resize borderless window on bottom right corner [https://stackoverflow.com/questions/1535826/resize-borderless-window-on-bottom-right-corner] (Antwort von Franci Penov: Update 2) sowie How to move and resize a form without a border? [https://stackoverflow.com/questions/2575216/how-to-move-and-resize-a-form-without-a-border]