Dessin avec la souris
Vous pouvez autoriser l’utilisateur à dessiner des lignes avec la souris en faisant glisser la procédure de la fenêtre pendant le 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 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 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 dessiner 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 retourner à partir du message, la procédure utilise la fonction ReleaseDC pour libérer le contexte de périphérique 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 de mémoire et une image bitmap associée pour stocker des lignes qui ont été dessinées à l’aide d’une souris.