Note:
1.iMouse = GetSystemMetrics(SM_MOUSEPRESENT);//检查鼠标是否安装
cButtons = GetSystemMetrics(SM_CMOUSEBUTTONS);///检查鼠标键个数
wdnclass.hCursor = LoadCursor(NULL, IDC_ARROW);//指定窗口的默认光标
2.鼠标事件中lParam值包含了鼠标位置。
x = LOWORD(lParam);
y = HIWORD(lParam);
wParam值指示鼠标键及Shift及Ctrl键状态。
wParam&MK_SHIFT !=0 //说明按鼠标键时Shift键也按下了。
3.希望窗口接受到双击事件,需要设定窗口风格。
wndclass.style = CS_DBLCLKS;
4.非客户区鼠标消息。
NC not client,有此标记的大多为非客户区消息,如NCPAINT等。
wParam、lParam与客户区鼠标消息有区别。
wParam指明移动或者单击鼠标键的非客户区位置,WINUSER.h中以HT开头的标志符。
lParam高、低位分别表示y、x坐标,注意是屏幕的而不像客户区内消息的是客户区坐标,使用时需要装换。
ScreenToClient(hwnd,&pt);
ClientToScreen(hwnd,&pt);
5.WM_NCHITTEST
非客户区命中测试,此消息优先于所有其他的客户区和非客户区鼠标消息。其中lParam含有鼠标x、y值,wParam没有实际意义。对此消息的操作可以屏蔽所有鼠标消息,很强大。
6.Windows使用WM_NCHITTEST消息产生所有其他鼠标消息。
7.鼠标光标的操作
鼠标光标有个显示计数,通过ShowCursor(TRUE)增加,通过ShowCursor(FALSE)减少。GetCursorPos(&pt)获取光标位置。SetCursorPos(x,y)设置位置。
8.GetWindowLong(hwnd,GWL_HINSTANCE);//获取窗口的hinstance
9.GetCapture ReleaseCapture。获取、释放鼠标,即使鼠标不在当前窗口内。
ps:鼠标操作是当前Windows最为常用的操作之一,使用较为频繁,但是不难,较易理解。