Share via


Disegno con il mouse

È possibile consentire all'utente di disegnare linee con il mouse facendo disegnare la routine della finestra durante l'elaborazione del messaggio WM_MOUSEMOVE . Il sistema invia il messaggio WM_MOUSEMOVE alla routine della finestra ogni volta che l'utente sposta il cursore all'interno della finestra. Per disegnare linee, la routine della finestra può recuperare un contesto di dispositivo di visualizzazione e disegnare una linea nella finestra tra le posizioni correnti e precedenti del cursore.

Nell'esempio seguente la procedura della finestra si prepara per il disegno quando l'utente preme e tiene premuto il pulsante sinistro del mouse (inviando il messaggio di WM_LBUTTONDOWN ). Quando l'utente sposta il cursore all'interno della finestra, la routine della finestra riceve una serie di messaggi WM_MOUSEMOVE . Per ogni messaggio, la routine della finestra disegna una linea che collega la posizione precedente e la posizione corrente. Per disegnare la linea, la procedura usa GetDC per recuperare un contesto di dispositivo di visualizzazione; non appena il disegno viene completato e prima di tornare dal messaggio, la procedura usa la funzione ReleaseDC per rilasciare il contesto del dispositivo di visualizzazione. Non appena l'utente rilascia il pulsante del mouse, la procedura della finestra cancella il flag e il disegno si interrompe (che invia il messaggio di 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; 

Un'applicazione che abilita il disegno, come in questo esempio, registra in genere i punti o le linee in modo che le linee possano essere ridisegnate ogni volta che la finestra viene aggiornata. Le applicazioni di disegno usano spesso un contesto di dispositivo di memoria e una bitmap associata per archiviare le linee disegnate usando un mouse.