Compartir a través de


Dibujo con el mouse

Puede permitir que el usuario dibuje líneas con el mouse haciendo que el procedimiento de la ventana dibuje mientras procesa el mensaje WM_MOUSEMOVE . El sistema envía el mensaje WM_MOUSEMOVE al procedimiento de ventana cada vez que el usuario mueve el cursor dentro de la ventana. Para dibujar líneas, el procedimiento de ventana puede recuperar un contexto de dispositivo de visualización y dibujar una línea en la ventana entre las posiciones del cursor actual y anterior.

En el ejemplo siguiente, el procedimiento de ventana se prepara para dibujar cuando el usuario presiona y mantiene el botón izquierdo del mouse (enviando el mensaje WM_LBUTTONDOWN ). A medida que el usuario mueve el cursor dentro de la ventana, el procedimiento de ventana recibe una serie de mensajes de WM_MOUSEMOVE . Para cada mensaje, el procedimiento de ventana dibuja una línea que conecta la posición anterior y la posición actual. Para dibujar la línea, el procedimiento usa GetDC para recuperar un contexto de dispositivo de visualización; a continuación, en cuanto se complete el dibujo y antes de volver del mensaje, el procedimiento usa la función ReleaseDC para liberar el contexto del dispositivo para mostrar. En cuanto el usuario suelta el botón del mouse, el procedimiento de ventana borra la marca y el dibujo se detiene (que envía el mensaje de 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; 

Una aplicación que habilita el dibujo, como en este ejemplo, suele registrar los puntos o líneas para que las líneas se puedan volver a dibujar cada vez que se actualice la ventana. Las aplicaciones de dibujo suelen usar un contexto de dispositivo de memoria y un mapa de bits asociado para almacenar líneas dibujadas mediante un mouse.