Mfc 关于父窗口中SetCapture()之后子控件的响应

Mfc 关于父窗口中SetCapture()之后子控件的响应,mfc,window,controls,Mfc,Window,Controls,我在视图中创建了一个窗口,并在该窗口中创建了一个滚动条控件 该窗口具有编辑模式。在编辑模式下,它将调用SetCapture,并将所有鼠标事件消息发送到窗口。因此,该视图中的其他窗口将被禁用,并且在编辑模式下没有机会进行鼠标操作 但它会导致以下问题: -在编辑模式下,鼠标在滚动条中的操作没有响应。因为SetCapture到父窗口 那么,如何设置捕获窗口,但使子控件响应鼠标操作?不能在WM_*BUTTONDOWN之外调用SetCapture。阅读文档 SetCapture不能在WM_*BUTTOND

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

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

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


那么,如何设置捕获窗口,但使子控件响应鼠标操作?

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

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

据我所知,此答案与此处所述的MSDN文档不匹配。这听起来像是在这里的示例中所做的,但它不是使用函数的约束条件。SetCapture API的目的是从某个窗口捕获鼠标事件,无论鼠标是否在窗口上方。约束与否,如果在非WM_*BUTTONDOWN处理程序中调用,则不会捕获鼠标消息。MSDN输了。我赢了。我相信我观察到了不同的行为。我在MFC对话项目中验证了这一点。如果你能产生不同的行为,那么看看如何做会很有趣。最好是在Windows 7或更高版本上。在Windows 8上的自定义窗口非MFC中,在任何事件处理程序外部调用SetCapture,在Spy++和代码中观察到该窗口捕获的所有消息。然而,由于与本问题中所述类似的原因,该设计随后被放弃——如果捕获窗口未处理消息,则消息不会转发到子窗口。我同意button down是常见的情况,尝试使用SetCapture实现其他功能可能不是一个好主意。据我所知,此答案与此处描述的MSDN文档不匹配。这听起来像是在这里的示例中所做的,但它不是使用函数的约束条件。SetCapture API的目的是从某个窗口捕获鼠标事件,无论鼠标是否在窗口上方。约束与否,如果在非WM_*BUTTONDOWN处理程序中调用,则不会捕获鼠标消息。MSDN输了。我赢了。我相信我观察到了不同的行为。我在MFC对话项目中验证了这一点。如果你能产生不同的行为,那么看看如何做会很有趣。最好是在Windows 7或更高版本上。在Windows 8上的自定义窗口非MFC中,在任何事件处理程序外部调用SetCapture,在Spy++和代码中观察到该窗口捕获的所有消息。然而,由于与本问题中所述类似的原因,该设计随后被放弃——如果捕获窗口未处理消息,则消息不会转发到子窗口。我同意button down是常见的情况,尝试使用SetCapture实现其他功能可能不是一个好主意。