Zeichnen mit der Maus

Sie können dem Benutzer erlauben, Linien mit der Maus zu zeichnen, indem Sie die Fensterprozedur zeichnen lassen, während die WM_MOUSEMOVE Nachricht verarbeitet wird. Das System sendet die WM_MOUSEMOVE Nachricht an die Fensterprozedur, wenn der Benutzer den Cursor im Fenster bewegt. Zum Zeichnen von Linien kann die Fensterprozedur einen Anzeigegerätekontext abrufen und eine Linie im Fenster zwischen der aktuellen und der vorherigen Cursorposition zeichnen.

Im folgenden Beispiel bereitet die Fensterprozedur das Zeichnen vor, wenn der Benutzer die linke Maustaste drückt und hält (sendet die WM_LBUTTONDOWN Nachricht). Wenn der Benutzer den Cursor innerhalb des Fensters bewegt, empfängt die Fensterprozedur eine Reihe von WM_MOUSEMOVE Nachrichten. Für jede Nachricht zeichnet die Fensterprozedur eine Linie, die die vorherige Position und die aktuelle Position verbindet. Um die Linie zu zeichnen, verwendet die Prozedur GetDC , um einen Anzeigegerätekontext abzurufen. sobald die Zeichnung abgeschlossen ist und bevor die Meldung zurückgegeben wird, verwendet die Prozedur die ReleaseDC-Funktion , um den Kontext des Anzeigegeräts freizugeben. Sobald der Benutzer die Maustaste loslässt, löscht die Fensterprozedur das Flag, und die Zeichnung wird beendet (wodurch die WM_LBUTTONUP Nachricht gesendet wird).

BOOL fDraw = FALSE; 
POINT ptPrevious; 
 
  . 
  . 
  . 
 
case WM_LBUTTONDOWN: 
    fDraw = TRUE; 
    ptPrevious.x = LOWORD(lParam); 
    ptPrevious.y = HIWORD(lParam); 
    return 0L; 
 
case WM_LBUTTONUP: 
    if (fDraw) 
    { 
        hdc = GetDC(hwnd); 
        MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
        LineTo(hdc, LOWORD(lParam), HIWORD(lParam)); 
        ReleaseDC(hwnd, hdc); 
    } 
    fDraw = FALSE; 
    return 0L; 
 
case WM_MOUSEMOVE: 
    if (fDraw) 
    { 
        hdc = GetDC(hwnd); 
        MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
        LineTo(hdc, ptPrevious.x = LOWORD(lParam), 
          ptPrevious.y = HIWORD(lParam)); 
        ReleaseDC(hwnd, hdc); 
    } 
    return 0L; 

Eine Anwendung, die das Zeichnen ermöglicht, wie in diesem Beispiel, zeichnet in der Regel entweder die Punkte oder Linien auf, sodass die Linien bei der Aktualisierung des Fensters neu gezeichnet werden können. Zeichnungsanwendungen verwenden häufig einen Speichergerätekontext und eine zugeordnete Bitmap, um Linien zu speichern, die mit einer Maus gezeichnet wurden.