Udostępnij za pośrednictwem


Rysowanie za pomocą myszy

Możesz zezwolić użytkownikowi na rysowanie linii za pomocą myszy, gdy procedura okna rysuje podczas przetwarzania komunikatu WM_MOUSEMOVE. System wysyła komunikat WM_MOUSEMOVE do procedury okna za każdym razem, gdy użytkownik przenosi kursor w oknie. Aby narysować linie, procedura okna może pobrać kontekst urządzenia wyświetlania i narysować linię w oknie między bieżącymi i poprzednimi położeniami kursora.

W poniższym przykładzie procedura okna przygotowuje się do rysowania, gdy użytkownik naciska i trzyma lewy przycisk myszy (wysyłając komunikat WM_LBUTTONDOWN). Gdy użytkownik przenosi kursor w oknie, procedura okna odbiera serię komunikatów WM_MOUSEMOVE. Dla każdego komunikatu procedura okna rysuje linię łączącą poprzednią pozycję i bieżące położenie. Aby narysować linię, procedura używa GetDC w celu pobrania kontekstu urządzenia wyświetlania; następnie, gdy tylko rysunek zostanie ukończony i przed powrotem z komunikatu, procedura używa funkcji ReleaseDC, aby zwolnić kontekst urządzenia wyświetlania. Gdy tylko użytkownik zwolni przycisk myszy, procedura okna wyczyści flagę, a rysunek zostanie zatrzymany (który wysyła komunikat WM_LBUTTONUP).

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; 

Aplikacja, która umożliwia rysowanie, tak jak w tym przykładzie, zwykle rejestruje punkty lub wiersze, tak aby wiersze mogły być ponownie rysowane za każdym razem, gdy okno zostanie zaktualizowane. Aplikacje rysunkowe często używają kontekstu urządzenia pamięci i skojarzonej mapy bitowej do przechowywania linii rysowanych za pomocą myszy.