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

时间:2008-09-19 02:20:03

标签: events mouse click wxwidgets

如何将click事件侦听器添加到使用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或类似的。

2 个答案:

答案 0 :(得分:4)

通常,没有“点击”事件(如果是wxWidgets - there isn't )。点击操作分为两部分:鼠标向下和鼠标向上。通常,您认为“左键单击”事件实际上是在“左上”事件中处理的。

尝试一下:

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

这一次:

  • 将鼠标悬停在同一按钮
  • 点击 按住鼠标左键并按住
  • 释放鼠标左键
  • 您期望的“点击”操作由up事件触发!

答案 1 :(得分:2)

在第一个例子中,我建议继承wxControl而不是wxWindow,wxControl是为了这个目的而设计的,你不太可能发现自己正在与系统作战。当我查看我在自己的wxWidgets应用程序中构建的控件时,我看到我的单击处理程序已附加到wxEVT_LEFT_DOWN。查看我使用wxWidgets的跨平台GUI编程副本,我可以看到所有wxMouseEvents的列表,并且没有wxEVT_LEFT_CLICK。我建议wxEVT_LEFT_DOWN是要使用的事件。

现在发布后我已经阅读了Burly的回答并且我同意他的看法,wxWidgets提供最低级别的活动,让您可以最大程度地控制为用户构建的用户界面。