单击wx切换按钮时不捕获鼠标

Don't Capture mouse when wxToggleButton is clicked

本文关键字:鼠标 按钮 wx 单击      更新时间:2023-10-16

我在wxGridSizer中有许多自定义的wxToggleButtons。 我希望能够按住鼠标左键+移动鼠标以快速激活多个按钮(同样在鼠标右键按下时停用它们(。

我已经在wxEVT_ENTER_WINDOW、wxEVT_LEFT_DOWN等上尝试了不同的绑定......根本问题是wxEVT_ENTER_WINDOW(也是wxEVT_LEAVE_WINDOW(在鼠标按下时不会触发,因此我假设第一个按钮以某种方式捕获了鼠标。显而易见的wxWindow::ReleaseMouse((不是答案,一些不同的机制在起作用。

我还快速浏览了 wxMouseEventsManager 的子类化,但我无法让它与在 MouseDragBegin(( 中返回 false 的计划一起工作。我不确定这是否是合适的方法。

如何在 wxToggleButton 的子类中禁用此鼠标捕获行为?

经过更多的研究,我发现这不是wxWidgets,而是Windows的罪魁祸首。

使用Spy++和字符映射表应用程序,我在小的"Unicode"文本控件中按下鼠标左键。然后在按住鼠标按钮的同时拖动它。
"选择"按钮根本没有收到任何消息。

因此,在某些情况下,窗口会阻止其他窗口的所有消息。

当您将鼠标按在本机按钮上时,它会捕获鼠标,并且仅在您释放鼠标按钮时释放鼠标。可以强制中断捕获,但这实际上不是一个好主意,并且会导致尴尬和不寻常的UI,因为无论您是否意识到,用户都习惯于本机按钮行为。