关于GetCursorPos()获取当前鼠标坐标位置不对的问题
时间:2011-12-22
来源:互联网
BOOL Cxx::PreTranslateMessage(MSG* pMsg)
{
CRect rt;
CPoint pt;
(GetDlgItem(BUTTONID))->GetWindowRect(&rt);
if(pMsg->message == WM_LBUTTONDOWN && pMsg-> hwnd == GetDlgItem(backspace)-> GetSafeHwnd())
{
GetCusorPos(&pt);
if(PtInRect(&rt,pt))
{
setTimer(1,500,NULL);
}
if(pMsg->message == WM_LBUTTONUP)
{
KillTimer(1);
}
return CDialog::PreTranslateMessage(pMsg);
}
但是,似乎GetCusorPos(&pt)这个函数获得的位置信息不对呀,我用一个MessageBox输出pt.x和pt.y的值,发现不管我点的屏幕哪里,他得到的值都是一样的:x=525328,y=0,然后我用ScreenToClient()后,得出的值为:x=525212,y=-46这是为什么呀?我如何才能得到正确的鼠标位置信息呢?请各位指教……
作者: xm877 发布时间: 2011-12-22
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG, *LPMSG;
pt
Type: POINT
The cursor position, in screen coordinates, when the message was posted.
作者: tangssm1 发布时间: 2011-12-22
会有重复按此按钮的效果,
WM_LBUTTONUP WM_LBUTTONDOWN 你要注意区别,
一直按着就是 down消息。。
作者: shen_wei 发布时间: 2011-12-22
1、当我用pMsg->pt来判断时,设置断点查看pt的值时,它的值始终是0,0,这是为什么呀?
2、当我用if(PtInRect(&rt,pt)&&pMsg->message == WM_LBUTTONDOWN)来判断时,长按按钮没反应,但是去掉&&pMsg->message == WM_LBUTTONDOWN以后就可以了,何解?
3、如果我用pMsg->pt时,setTimer()中的时间值就要设小点,400以上要按N久才会有反应,起初让我误以为pMsg->pt是没用的……
作者: xm877 发布时间: 2011-12-22
没有的话,哪里有值??
作者: shen_wei 发布时间: 2011-12-22
作者: xm877 发布时间: 2011-12-22
作者: VisualEleven 发布时间: 2011-12-22
你如果点击的不是窗口所在的区域,坐标怎么可能会正确呢?没有消息响应啊
没看懂,我点的就是窗口里的按钮呀?怎么会没有消息响应呢?
作者: xm877 发布时间: 2011-12-22
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28