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.