Events wxWidgets:检测自定义控件上的单击事件

Events wxWidgets:检测自定义控件上的单击事件,events,mouse,click,wxwidgets,Events,Mouse,Click,Wxwidgets,如何将单击事件侦听器添加到使用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_WIND

如何将单击事件侦听器添加到使用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\u左键单击
或类似功能

通常,不存在“点击”事件(在- ).点击的动作分为两部分:鼠标向下和鼠标向上。通常,您认为的“左键单击”事件实际上是在“左上”事件中处理的

试一试:

  • 将鼠标悬停在按钮上(如本页的“添加注释”按钮)
  • 单击鼠标左键并按住
  • 按住同时将鼠标从按钮上移开
  • 松开鼠标左键
  • 什么也没发生
这次:

  • 将鼠标悬停在同一按钮上
  • 点击 按住鼠标左键
  • 松开鼠标左键
  • 您期望的“单击”操作由up事件触发
首先,我建议继承wxControl而不是wxWindow,wxControl就是为了这个目的而设计的,您不太可能发现自己在与系统抗争。当我查看我在自己的wxWidgets应用程序中构建的控件时,我看到我的单击处理程序连接到wxEVT_LEFT_DOWN。在我的wxWidgets跨平台GUI编程副本中,我可以看到所有wxMouseEvents的列表,没有wxEVT左键单击。我建议使用wxEVT_LEFT_DOWN事件


发布后,我已经阅读了Burly的答案,我同意他的观点,wxWidgets提供了最低级别的事件,让您能够最大程度地控制为用户构建的用户界面。

是的,这就是使用左下键而不是单击的问题。通常,用户可以在按住鼠标按钮后,通过将指针移到对象外部来取消单击。在这里,我需要通过检测left-down和left-up来准确地检测点击?多麻烦啊:(我认为,如果你正在编写控件,你需要准备好管理用户鼠标交互的所有细节。从这个角度来看,wxWidget系列鼠标事件是有意义的。感谢你建议使用wxControl。我对wxWidgets是新手,所以我不知道继承哪个控件。左下事件与单击不同,用户c在释放鼠标按钮之前,不要让指针位于控件之外来取消单击。