>我有一个派生类,我想根据bool
参数跳过鼠标滚轮事件。所以如果我设置bScroll = true
,我希望基类 Bar 处理滚轮事件。如果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();
}
};
正确的解决方案不是使用虚函数,而是相反,使用非虚函数并正确Connect()
或Bind()
Foo::OnMouseWheel()
和Bar::OnMouseWheel()
。然后做if(m_scroll) roEvent.Skip();
就足够了。请参阅事件处理程序与虚拟方法
if(m_scroll) roEvent.Skip();else Bar::OnMouseWheel(roEvent);