[ C/Win32 ] Window ohne Caption mit Maus verschieben

Rene Albrecht

Erfahrenes Mitglied
Ich habe ein Dialogfenster erstellt, das kein Caption hat (weil ich den Titel in Form einer Bitmap eingefügt habe). Wie verschiebe ich dieses Window mit der Maus? Ich habe von einer WM_NCHITTEST gelesen, weiß aber nicht wie ich die einsetzen muss. :confused:

Gruß
René
 
Ich denk ma, da musst du dir was selber schreiben.

Du könntest zB die WM_MOUSEMOVE-Message abfangen und überprüfen, ob die Maustaste gedrückt ist (wParam&MK_LBUTTON). Falls ja, verschiebst du dein Fenster einfach. Um zu wissen wieviel du es verschieben musst, solltest du die jeweils vorhergehende Mausposition speichern.

Die WM_NCHITTEST-Message liefert dir glaub nich genug Infos, um das zu machen.

Wenn du was über Messages wissen willst, gehst du einfach auf die MSDN, da wird jede genau erklärt.
 
Du kannst in WM_NCHITTEST prüfen, ob die Maus in einem zu draggendem Bereich liegt, und in dem Fall HTCAPTION zurückgeben. Andernfalls die DefWindowProc die Nachricht bearbeiten lassen.

Windows regelt dann den Rest für das Draggen automatisch.

Achtung: WM_NCHITTEST - Die Mauskoordinaten sind Bildschirmkoordinaten!
 
Hab's jetzt über die Callback-Prozedur des Windows wie folgt realisiert:

Code:
   POINT mouse_pos;
   RECT borders;
...
   case WM_LBUTTONDOWN:
      GetCursorPos(&mouse_pos);
      GetWindowRect(hwnd,&borders);
      if ((mouse_pos.y>=borders.top) && (mouse_pos.y<=(borders.top+20)))
         SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
      return 0;

Und es funktioniert! :-)

Dank & Gruß
René
 
Zurück