我有一个派生类,我希望根据bool
参数跳过鼠标滚轮事件。因此,如果我设置bScroll = true
,我希望基类Bar处理Scrollwheel事件。如果bScroll = false
我想要忽略它们。
使用下面的代码,事件永远不会到达基类OnMouseWheel
函数。这是某种传播问题吗?
我怎样才能解决这个问题?
谢谢!
class Foo : public Bar
{
public:
Foo(wxWindow *pParent, bool bScroll = true) : Bar(pParent)
{
m_scroll = bScroll;
}
bool m_scroll;
protected:
virtual void OnMouseWheel(wxMouseEvent& roEvent)
{
if(m_scroll)
roEvent.Skip();
}
};
答案 0 :(得分:1)
正确的解决方案不是使用虚拟功能,而是使用非虚拟功能,正确Connect()
或Bind()
Foo::OnMouseWheel()
和Bar::OnMouseWheel()
。
然后做if(m_scroll) roEvent.Skip();
就足够了。
见Event Handlers vs Virtual Methods
答案 1 :(得分:0)
if(m_scroll)roEvent.Skip(); else Bar :: OnMouseWheel(roEvent);