【问题标题】:Locking focus and capture to a specific window锁定焦点并捕捉到特定窗口
【发布时间】:2009-04-09 15:32:36
【问题描述】:

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

【问题讨论】:

  • 在这种特殊情况下,它用于颜色采样器。

标签: c++ mouse cursor capture setfocus


【解决方案1】:

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多