【问题标题】:wxWidgets: Detecting click event on custom controlswxWidgets:检测自定义控件上的点击事件
【发布时间】:2008-09-19 02:20:03
【问题描述】:

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

【问题讨论】:

    标签: events mouse click wxwidgets


    【解决方案1】:

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

    试试看:

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

    这次:

    • 将鼠标悬停在同一个按钮上
    • 单击 按住鼠标左键
    • 松开鼠标左键
    • 你期望的“点击”动作是由 up 事件触发的!

    【讨论】:

    • 是的,就是使用左下而不是点击的问题。通常用户可以在按住鼠标按钮后通过将指针移到对象外来取消单击。这里我需要通过检测left-down和left-up来准确检测click?好麻烦:(
    • 我认为如果你正在编写一个控件,你需要准备好管理用户鼠标交互的所有细节。从这个角度来看,wxWidget 系列的鼠标事件是有意义的。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您对使用 wxControl 的建议。我是 wxWidgets 的新手,所以我不知道要继承哪个控件。左下事件与单击不同,用户无法通过在释放鼠标按钮之前让指针位于控件之外来取消单击。
    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 2020-11-22
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多