透明窗体如何捕获鼠标当前位置

_静以修身 2013-06-16 11:37:36
问题原因:1、透明窗体,鼠标穿透,无法捕获鼠标移动消息
2、不想使用全局钩子
3、在鼠标移动时,可以获取到当前坐标

问题可以简化为,一个程序实时获取鼠标目前在桌面的位置。(类似于全局的MouseMove消息)

求大神给点思路,谢谢~
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
用钩子太麻烦, 用下面的线程监视鼠标移动。 DWORD WINAPI MsgThread(LPVOID lParam) { DWORD dwOldPos = 0; // 记录上一次鼠标位置. DWORD dwCurPos = 0; // 记录当前鼠标位置。 POINT pt; while (g_bRun){ Sleep(0); // 获取当前鼠标位置。 if (! GetCursorPos (&pt)) continue; dwCurPos = MAKEWPARAM (pt.x, pt.y); if (dwCurPos != dwOldPos) // 当两者不相等时,意味着鼠标已经移动, // 向主窗口发送消息。 { PostMessage (g_hMainWnd, WM_USER+1, dwCurPos, 0); dwOldPos = dwCurPos; }else{ // 当两者相等时,意味着鼠标在原地没有动。就不发消息了 continue; } } return 0; }
Eleven 2013-06-17
  • 打赏
  • 举报
回复
计时器效率太低,推荐用钩子WH_MOUSE_LL 或者SetCapture/ReleaseCapture()试试
leeihcy 2013-06-17
  • 打赏
  • 举报
回复
用个定时器来监听吧,不用太频繁,试试500ms的定时器。 然后拿到当前鼠标位置和鼠标下的窗口(防止被别的窗口遮挡)。 当得知鼠标位于自己的范围内时,再显示出一个非鼠标穿透的拖拽条即可。 我记得以前超级兔子好像做过这样一个小工具,和windows7的时钟工具一样。
傻X 2013-06-17
  • 打赏
  • 举报
回复
获得的坐标当前窗口的坐标,使用ClientToScreen来转换就可以了
_静以修身 2013-06-17
  • 打赏
  • 举报
回复
手动顶顶

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧