2008-09-19 113 views
2

如何将点击事件监听器添加到使用wxWidgets制作的自定义控件中?自定义控件使用wxWindow作为基础。在事件列表我看到wxWidgets:检测自定义控件上的单击事件

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或相似。

回答

4

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

试试看:

  • 将鼠标悬停在一个按钮(如“添加评论”按钮此页)
  • 单击鼠标左键,并按住
  • 将鼠标移开的同时按下按钮
  • 释放鼠标左键
  • 什么也没有发生!

这一次:

  • 将鼠标悬停在同一个按钮
  • 点击 鼠标左键,并按住
  • 松开鼠标左键
  • “点击”行动你期望是由up事件引发的!
+0

是的,这是使用左下而不是点击的问题。通常,用户可以通过将指针移动到对象外面来按住鼠标按钮来取消点击。在这里,我需要通过检测左下和左上来准确检测点击?真是太麻烦了:( – yuku 2008-09-19 06:13:50

+1

我想如果你要编写一个控件,你需要准备好管理用户鼠标交互的所有细节,从这个角度来看,wxWidget系列的鼠标事件是有意义的 – 2008-09-19 23:46:52

2

在第一个实例中,我建议从wxControl继承而不是wxWindow,wxControl是为了确切目的而设计的,并且您不太可能发现自己正在与系统进行对抗。当我看着我在自己的wxWidgets应用程序中构建的控件时,发现我的点击处理程序已连接到wxEVT_LEFT_DOWN。用wxWidgets查看我的跨平台GUI编程副本,我可以看到所有wxMouseEvents的列表,并且没有wxEVT_LEFT_CLICK。我建议wxEVT_LEFT_DOWN是要使用的事件。

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