【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
自从上一期说了键盘消息之后,我就在想怎么写好鼠标这一章。其实和键盘消息相比较,鼠标消息也不难。几乎不需要在ResourceView做什么操作,直接在WndProc添加case响应就可以了,比如说像这样,
case WM_LBUTTONDOWN:
break;
case WM_LBUTTONUP:
break;
当然,上面的只是一份说明,我们总要写一点有意思的东西,比如说划线。这就是一个经常用来说明鼠标应用的例子。当让鼠标按下去的时候,记录一下鼠标的x、y坐标。等到鼠标返回的时候,再记录一下鼠标的坐标,利用这两个坐标画一条直线就可以了。为此,我们做了如下修改,
case WM_LBUTTONDOWN:
x = GET_X_LPARAM(lParam);
y = GET_Y_LPARAM(lParam);
break;
case WM_LBUTTONUP:
hdc = GetDC(hWnd);
MoveToEx(hdc, x, y, NULL);
LineTo(hdc, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
ReleaseDC(hWnd, hdc);
break;
看上去也不是什么太复杂,为此,我们还需要定义一下x、y变量,且引用一下定义GET_X_LPARAM和GET_Y_LPARAM的头文件,
#include <windowsx.h>
int x = 0;
int y = 0;
经过这两个步骤,基本上鼠标画线的流程就算完成了。但是美中不足的是,我们没有保存每次直线的位置,等到app最小化后恢复的时候,app上面所有的直线就消失了,这个时候app又会是白茫茫一片。所以,如果要想体验好的话,一定要记录直线坐标的位置,且在WM_PAINT的时候,重新将这些直线画出来。