锁定焦点并捕获到特定窗口

时间:2009-04-09 15:32:36

标签: c++ mouse cursor capture setfocus

我可以使用切换机制调用setfocus和setcapture,并且在OnLButtonDown中确保消息不会被传递,但是在您单击左键时似乎失败了。有没有办法确保具有捕获和聚焦的窗口不会放弃它?

1 个答案:

答案 0 :(得分:2)

对于颜色选择器,请尝试阅读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页面都有大量可以帮助您的信息,更不用说您是否愿意使用密钥来解决问题相反,第二个链接非常适合你。

希望有所帮助。