使用鼠标绘制

【勇芳软件工作室】汉化HomePreviousNext

您可以通过在处理WM_MOUSEMOVE消息时绘制窗口过程,允许用户使用鼠标绘制线条。只要用户在窗口中移动光标,Windows就会向窗口过程发送WM_MOUSEMOVE消息。要绘制线条,窗口过程可以检索一个显示DC,并在当前和之前光标位置的窗口中画一条线。

在以下示例中,当用户按住鼠标左键(发送WM_LBUTTONDOWN消息))时,窗口过程将准备进行绘图。当用户在窗口内移动光标时,窗口过程接收一系列WM_MOUSEMOVE消息。对于每个消息,窗口过程绘制连接前一位置和当前位置的线。要绘制线,该过程使用GetDC检索显示DC;那么,一旦绘图完成并且在从消息返回之前,该过程使用ReleaseDC函数来释放显示器DC。一旦用户释放鼠标按钮,窗口过程将清除该标志,并且绘图停止(发送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;

如本例所示,启用绘图的应用程序通常会记录点或线,以便每当窗口更新时都可以重新绘制线条。绘图应用程序通常使用存储器DC和关联位图来存储通过使用鼠标绘制的线。