如何向使用 wxWidgets 制作的自定义控件添加单击事件侦听器?自定义控件使用wxWindow作为基础。在活动列表上我看到

wxEVT_LEFT_DOWN 
wxEVT_LEFT_UP 
wxEVT_LEFT_DCLICK
wxEVT_MIDDLE_DOWN
wxEVT_MIDDLE_UP 
wxEVT_MIDDLE_DCLICK
wxEVT_RIGHT_DOWN 
wxEVT_RIGHT_UP
wxEVT_RIGHT_DCLICK
wxEVT_MOTION
wxEVT_ENTER_WINDOW
wxEVT_LEAVE_WINDOW
wxEVT_MOUSEWHEEL 

但没有 wxEVT_LEFT_CLICK 或类似的。

有帮助吗?

解决方案

通常,没有“点击”事件(并且在这种情况下 wxWidgets - 没有)。单击操作分为两部分:鼠标向下和鼠标向上。通常,您认为的“左键单击”事件实际上是在“左上”事件中处理的。

试试看:

  • 将鼠标悬停在按钮上(例如本页的“添加评论”按钮)
  • 单击鼠标左键并按住
  • 按住按钮的同时将鼠标从按钮上移开
  • 释放鼠标左键
  • 什么都没发生!

这次:

  • 将鼠标悬停在同一按钮上
  • 单击向下的左小鼠按钮并保持
  • 释放鼠标左键
  • 你所期望的“点击”动作是由up事件触发的!

其他提示

在第一个实例中,我建议继承 wxControl 而不是 wxWindow,wxControl 就是为此目的而设计的,并且您不太可能发现自己与系统作斗争。当我查看在自己的 wxWidgets 应用程序中构建的控件时,我看到我的单击处理程序已附加到 wxEVT_LEFT_DOWN。查看我的《使用 wxWidgets 进行跨平台 GUI 编程》的副本,我可以看到所有 wxMouseEvent 的列表,并且没有 wxEVT_LEFT_CLICK。我建议使用 wxEVT_LEFT_DOWN 事件。

现在,在发帖后,我已经阅读了 Burly 的答案,并且我同意他的观点,wxWidgets 提供了最低级别的事件,这使您可以最大程度地控制为用户构建的用户界面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top