wxWidgets:检测自定义控件上的click事件

时间:2020-03-06 14:24:25  来源:igfitidea点击:

如何将单击事件侦听器添加到使用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提供了最低级别的事件,使我们可以最大程度地控制为用户构建的用户界面。