【问题标题】:About sub control's response after SetCapture() in parent window关于父窗口SetCapture()后子控件的响应
【发布时间】:2012-02-06 06:15:14
【问题描述】:

我在视图中创建一个窗口并在该窗口中创建一个滚动条控件。

窗口具有编辑模式。在编辑模式下,它将调用 SetCapture() 并将所有鼠标事件消息发送到窗口。因此,该视图中的其他窗口将被禁用,并且在编辑模式下没有机会进行鼠标操作。

但它会导致以下问题: - 在编辑模式下,滚动条中的鼠标操作没有反应。因为 SetCapture() 到父窗口。

那么我怎样才能SetCapture()一个窗口但让子控件响应鼠标操作呢?

【问题讨论】:

    标签: mfc window controls


    【解决方案1】:

    SetCapture 不得在WM_*BUTTONDOWN 之外调用。阅读文档!

    【讨论】:

    • 据我了解,此答案与此处描述的 MSDN 文档不匹配 msdn.microsoft.com/en-us/library/windows/desktop/…。这听起来像这里的示例中所做的 (msdn.microsoft.com/en-us/library/windows/desktop/…) 但它不是使用该函数的限制。
    • SetCapture API 的目的是从某个窗口捕获鼠标事件,无论鼠标是否在窗口上方。约束与否,如果在非WM_*BUTTONDOWN 处理程序中调用,鼠标消息将不会被捕获。 MSDN 输了。我赢了。
    • 我相信我观察到了不同的行为。
    • 我在MFC 对话项目中验证了这一点。如果您可以产生不同的行为,那么看看如何产生会很有趣。最好在Windows 7 或更高版本上。
    • 在自定义窗口(Windows 8 上的非 MFC)中,在任何事件处理程序之外调用 SetCapture,所有消息都被窗口捕获(在 Spy++ 和代码中观察到)。然而,这种设计随后被放弃,原因与此问题中描述的类似 - 如果捕获窗口未处理消息,则消息不会转发到子窗口。我同意按钮按下的情况是常见的情况,尝试使用 SetCapture 来实现其他事情可能不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2013-02-14
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多