【发布时间】:2009-04-09 15:32:36
【问题描述】:
我可以使用切换机制调用 setfocus 和 setcapture,并在 OnLButtonDown 中确保消息不会被传递,但是在您左键单击时似乎失败了。有什么办法可以保证有捕获和焦点的窗口不放弃?
【问题讨论】:
-
在这种特殊情况下,它用于颜色采样器。
标签: c++ mouse cursor capture setfocus
我可以使用切换机制调用 setfocus 和 setcapture,并在 OnLButtonDown 中确保消息不会被传递,但是在您左键单击时似乎失败了。有什么办法可以保证有捕获和焦点的窗口不放弃?
【问题讨论】:
标签: c++ mouse cursor capture setfocus
对于颜色选择器,请尝试阅读 this article 从屏幕上的任何位置获取颜色。
This one 是一个更完整的实用程序,让你为所欲为。不同之处在于在组合键 [Alt+Ctrl+P] 上捕获停止,您希望在单击时停止。
在第二个链接中,以下函数调用将对您有用:
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
RegisterHotKey(m_hWnd, 0x1FEB, MOD_CONTROL | MOD_ALT, 0x50);
第一个使窗口保持活动状态,第二个注册 Alt+Ctrl+P(按下该按钮时,窗口将收到 WM_HOTKEY 事件,您可以在此停止捕获颜色)。遗憾的是,您不能将 RegisterHotKey 与鼠标按钮一起使用。你会想看看SetWindowsHookEx
使用 SetWindowsHookEx,您可以确保您的应用程序即使没有焦点也能接收事件。使用钩子“WH_MOUSE”以及Mouse Procedure 调用 SetWindowsHookEx。
在此过程中,您将收到鼠标消息,停止捕捉鼠标移动的位置(锁定颜色),并使用 SetWindowPos 将窗口移动到顶部。然后用UnhookWindowsHookEx 取消注册你的钩子。
这是你可能需要学习的很多东西,但我链接到你的所有 MSDN 页面都有大量信息可以帮助你,更不用说你是否愿意用钥匙解决相反,第二个链接非常适合您。
希望对您有所帮助。
【讨论】: