Share via


Desenho com o mouse

Você pode permitir que o usuário desenhe linhas com o mouse fazendo com que o procedimento de janela seja desenhado durante o processamento da mensagem WM_MOUSEMOVE . O sistema envia a mensagem WM_MOUSEMOVE para o procedimento de janela sempre que o usuário move o cursor dentro da janela. Para desenhar linhas, o procedimento de janela pode recuperar um contexto de dispositivo de exibição e desenhar uma linha na janela entre as posições atuais e anteriores do cursor.

No exemplo a seguir, o procedimento de janela se prepara para o desenho quando o usuário pressiona e segura o botão esquerdo do mouse (enviando a mensagem WM_LBUTTONDOWN ). À medida que o usuário move o cursor dentro da janela, o procedimento de janela recebe uma série de mensagens WM_MOUSEMOVE . Para cada mensagem, o procedimento de janela desenha uma linha que conecta a posição anterior e a posição atual. Para desenhar a linha, o procedimento usa GetDC para recuperar um contexto de dispositivo de exibição; em seguida, assim que o desenho for concluído e antes de retornar da mensagem, o procedimento usará a função ReleaseDC para liberar o contexto do dispositivo de exibição. Assim que o usuário libera o botão do mouse, o procedimento da janela limpa o sinalizador e o desenho é interrompido (que envia a mensagem 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; 

Um aplicativo que habilita o desenho, como neste exemplo, normalmente registra os pontos ou linhas para que as linhas possam ser redesenhadas sempre que a janela for atualizada. Os aplicativos de desenho geralmente usam um contexto de dispositivo de memória e um bitmap associado para armazenar linhas que foram desenhadas usando um mouse.