码迷,mamicode.com
首页 > 其他好文 > 详细

GetCursorPos() 与GetMessagePos()的区别

时间:2015-04-07 12:09:06      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

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()的区别

标签:

原文地址:http://blog.csdn.net/jiangqin115/article/details/44916351

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!