【问题标题】:How can I make wxWidgets controls accept middle-button clicks?如何让 wxWidgets 控件接受中键点击?
【发布时间】:2012-09-08 04:00:08
【问题描述】:

我有一个场景,我希望一些 wxWidgets 控件响应鼠标中键单击,其行为方式与通常的左键单击完全相同,除了我应该能够告诉它是中键单击并在我的应用程序中执行不同的操作。

具体来说,我正在使用按钮和滑块,并且希望按钮可以按下,并且滑块可以通过中间按钮拖动。我使用的是 Windows(这是我唯一关心的平台),以防万一。

在浏览了 wx 文档之后,我没有找到任何方法来设置控件侦听的鼠标按钮。所以,我的第一个想法是编写一个事件处理程序,它可以捕获中键事件,将它们转换为相应的左键事件,并告诉 wx 处理它们:

void OnMouseEvent(wxMouseEvent & wxevent)
{
    wxMouseEvent wxeventTranslated = wxevent;

    if (wxevent.MiddleDown())
    {
        wxeventTranslated.SetEventType(wxEVT_LEFT_DOWN);
    }
    else if (wxevent.MiddleUp())
    {
        wxeventTranslated.SetEventType(wxEVT_LEFT_UP);
    }
    else
    {
        return;
    }

    m_pWxbutton->ProcessWindowEvent(wxeventTranslated);
}

(这里m_pWxbutton 是注册事件的wxButton)。它不起作用:鼠标事件处理程序被调用,但我从未收到wxEVT_COMMAND_BUTTON_CLICKED 事件,按钮也没有在 GUI 中进入“按下”视觉状态。我还尝试了一个版本,我更改了传入事件的事件类型,然后调用Skip(),但结果相同。

诚然,对于按钮来说,自己检测点击很容易,但我希望它也适用于滑块,而且我不喜欢为这些重新实现所有鼠标逻辑的想法。 :)

如何翻译鼠标事件并让它们表现得像原生 GUI 事件?或者,我应该尝试一种完全不同的方法吗?

【问题讨论】:

    标签: c++ mouseevent wxwidgets


    【解决方案1】:

    您不能像这样修改标准控件的行为——这就是它们是标准的原因。当然,您可以使用自定义的类似按钮的控件以任何您想要的方式处理鼠标,但是没有可移植的方式来修改标准控件以执行您想要的操作,充其量您可以使用特定于平台的代码并且在某些平台上这可能是完全不可能的。

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多