GetCursorPos() 与GetMessagePos()的区别

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)
{
...
}

你可能感兴趣的:(GetCursorPos() 与GetMessagePos()的区别)