1. GetCursorPos()
函数原型:BOOL GetCursorPos(LPPOINT lpPoint);
函数功能:该函数检取光标的位置, 以屏幕坐标表示.
参 数:IpPoint:POINT结构指针, 该结构接收光标的屏幕坐标.
返 回 值:如果成功, 返回值非零; 如果失败, 返回值为零. 若想获得更多错误信息, 请调用GetLastError函数.
2. GetMessagePos()
函数原型:DWORD GetMessagePos(VOID)
函数功能:该函数返回表示屏幕坐标下光标位置的长整数值. 此位置表示当上一消息由GetMessage取得时鼠标占用的点.
返 回 值:返回值给出光标位置的X, y坐标. X坐标在低位整数, y坐标在高位整数.
备注:
(1)如前所述,X坐标在返回值的低位整数,y坐标在高位整数(都表示有符号值,因为在多显示器的系统里可取得负值)。
(2)如果返回值赋给了一个变量,可用MAKEPOINT宏从返回值取得POINT结构。
(3)也可用GET_X_LPARAM或GET_Y_LPARAM宏来抽取X,y坐标,取得的坐标为屏幕坐标,并不是客户区坐标。
注意:
不要用LOWORD或HIWORD宏来抽取鼠标位置的x,y坐标,因为在多显示器的系统里将返回不正确的结果。
多显示器的系统里可取得负的x, y坐标,但LOWORD和HIWORD将坐标当作无符号量。
二者区别:
要得到光标的当前位置而不是上一个消息发生时的位置,调用函数GetCursorPos。
判断鼠标击中RECT区域的方法:
先getwindowrect()得到得是屏幕坐标
再screentoclient()转化为客户区坐标
然后ptinrect()判断
例如:对话框中有一个webBrowser控件,怎样判定鼠标点击的位置是否落在webBrowser控件内?
方法I: getwindowrect() screentoclient() ptinrect() 方法2: CPoint pntCursor; if (GetCursorPos(&pntCursor)) { if (this == WindowFromPoint(pntCursor)) { int flag = 1; } } 方法3: 把控件属性中的"Notify"勾上, 然后在PreTranslateMessage中 if(pMsg->hwnd==GetDlgIte(IDC_WEBBROWER1)->m_hWnd) { ... }