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提供了最低级别的事件,使我们可以最大程度地控制为用户构建的用户界面。