0

我有一个场景,我希望一些 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_pWxbuttonwxButton注册事件的地方)。它不起作用:调用了鼠标事件处理程序,但我从未收到wxEVT_COMMAND_BUTTON_CLICKED事件,按钮也没有在 GUI 中进入“按下”视觉状态。我还尝试了一个版本,我更改了传入事件的事件类型,然后调用Skip()了 ,但结果相同。

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

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

4

1 回答 1

0

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

于 2012-09-15T10:57:14.230 回答