Partager via


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 d’appareil d’affichage et dessiner une ligne dans la fenêtre entre les positions actuelles et précédentes du curseur.

Dans l’exemple suivant, la procédure de fenêtre se prépare à dessiner lorsque l’utilisateur appuie sur le bouton gauche de la souris (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 qui connecte la position précédente et la position actuelle. Pour dessiner la ligne, la procédure utilise GetDC pour récupérer un contexte d’appareil d’affichage ; ensuite, dès que le dessin est terminé et avant de retourner à 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 (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 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 d’appareil mémoire et une bitmap associée pour stocker des lignes dessinées à l’aide d’une souris.