第七章 鼠标

    1、对于客户区的鼠标消息,其lParam值均含有鼠标的位置:低位字为x坐标,高位字为y坐标,这两个坐标是相对于窗口客户区左上角的位置。可以用LOWORD和HIWORD来提取这些值:

x=LOWORD(lParam); y=HIWORD(lParam);

wParam的值指示鼠标键及Shift键和Ctrl键的状态。

    2、窗口过程可以“捕获鼠标”并且连续地接收鼠标消息,即使此时鼠标在该窗口客户区之外。

    3、如果正在显示一个模态系统消息框或者模态系统对话框,那么其他程序就不能接收鼠标消息。当模态系统消息或者对话框处于活动态时,禁止切换到其他窗口或者程序。当关闭Windows会话时,将会显示一个模态系统消息框的例子。

    4、GetKeyState的使用:GetKeyState返回当前正在处理的鼠标键或者shift键的状态,所以全部状态信息都与相应的消息是同步的。但是,正如不能把GetKeyState用于尚未按下的键一样,也不能为尚未按下的键调用GetKeyState。不要这样做:

while(GetKeyState(VK_LBUTTON)>=0);//Wrong!!!

只有在调用GetKeyState期间处理消息是,如果左键已经按下,才会报告键已按下的消息。

    5、非客户区鼠标消息的wParam和lParam参数与客户区鼠标消息的wParam和lParam参数有一定差别。wParam指明移动或者单击鼠标键的非客户区位置。lParam包含低位字x坐标和高位字y坐标,但是,它们都是屏幕坐标,而非客户区坐标。屏幕坐标和客户区坐标转换的函数:

ScreenToClient(hwnd,&pt); ClientToScreen(hwnd,&pt);

    6、WM_NCHITTEST,非客户区命中测试消息,它优先于所有其他的客户区和非客户区鼠标消息。通过下列语句可以有效地禁止窗口中的而所有客户区和非客户区鼠标消息。

case WM_NCHITTEST: return (LRESULT)HTNOWHERE;

你可能感兴趣的:(windows,活动,测试)