2012-09-15 40 views
0

我有一个场景,我希望一些wxWidgets控件响应中间按钮的鼠标点击,其行为方式与他们通常的左键单击方式完全相同,除了我应该能够告诉它是中间单击并在我的应用中做一些不同的事情。如何让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其中事件已注册)。它不起作用:鼠标事件处理程序被调用,但我从来没有得到一个事件,按钮也不会在GUI中进入“按下”视觉状态。我也尝试了一个版本,我在传入的事件中更改了事件类型,然后调用Skip(),但结果相同。

不可否认,对于按钮来说,检测点击自己很容易,但我希望能够将它用于滑块,并且我不喜欢重新实现所有鼠标逻辑的想法。 :)

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

回答

0

不能修改这样的标准控件的行为 - 这就是为什么他们是标准。当然,您可以使用自定义按钮式控件以任何您想要的方式处理鼠标,但是没有可移植的方式来修改标准控件以实现自己想要的功能,最多可以使用特定于平台的代码并在某些平台上这可能是完全不可能的。