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)
{
...
}
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值