Dessin avec la souris

Vous pouvez autoriser l’utilisateur à dessiner des lignes avec la souris en faisant dessiner votre procédure de fenêtre lors du traitement du message WM_MOUSEMOVE . Le système envoie le message WM_MOUSEMOVE à la procédure de fenêtre chaque fois que l’utilisateur déplace le curseur dans la fenêtre. Pour dessiner des lignes, la procédure de fenêtre peut récupérer un contexte de périphérique d’affichage et tracer une ligne dans la fenêtre entre les positions de curseur actuelles et précédentes.

Dans l’exemple suivant, la procédure de fenêtre prépare le dessin lorsque l’utilisateur appuie sur le bouton gauche de la souris (en envoyant le message WM_LBUTTONDOWN ). Lorsque l’utilisateur déplace le curseur dans la fenêtre, la procédure de fenêtre reçoit une série de messages WM_MOUSEMOVE . Pour chaque message, la procédure de fenêtre dessine une ligne reliant la position précédente et la position actuelle. Pour tracer la ligne, la procédure utilise GetDC pour récupérer un contexte de périphérique d’affichage ; ensuite, dès que le dessin est terminé et avant de revenir à partir du message, la procédure utilise la fonction ReleaseDC pour libérer le contexte de l’appareil d’affichage. Dès que l’utilisateur relâche le bouton de la souris, la procédure de fenêtre efface l’indicateur et le dessin s’arrête (ce qui envoie le message 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; 

Une application qui active le dessin, comme dans cet exemple, enregistre généralement les points ou les lignes afin que les lignes puissent être redessinées chaque fois que la fenêtre est mise à jour. Les applications de dessin utilisent souvent un contexte de périphérique mémoire et une bitmap associée pour stocker les lignes dessinées à l’aide d’une souris.