2

如何向使用 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或类似的。

4

2 回答 2

4

通常,没有“点击”事件(在wxWidgets的情况下-没有 )。点击的动作分为两部分:Mouse Down 和 Mouse Up。通常,您认为的“左键单击”事件实际上是在“左键”事件中处理的。

试试看:

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

这次:

  • 将鼠标悬停在同一个按钮上
  • 单击鼠标左键并按住
  • 松开鼠标左键
  • 你期待的“点击”动作是由 up 事件触发的!
于 2008-09-19T04:34:18.247 回答
2

在第一种情况下,我建议从 wxControl 而不是 wxWindow 继承,wxControl 就是为这个目的而设计的,您不太可能发现自己与系统作斗争。当我查看在我自己的 wxWidgets 应用程序中构建的控件时,我看到我的点击处理程序已附加到 wxEVT_LEFT_DOWN。查看我的使用 wxWidgets 进行跨平台 GUI 编程的副本,我可以看到所有 wxMouseEvents 的列表,并且没有 wxEVT_LEFT_CLICK。我建议 wxEVT_LEFT_DOWN 是要使用的事件。

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

于 2008-09-19T04:44:57.020 回答