2016-01-21 9 views
0

我有一個派生類,我想根據參數bool跳過鼠標滾輪事件。所以如果我設置了bScroll = true,我想要基類Bar來處理Scrollwheel事件。如果bScroll = false我希望他們被忽略。 使用下面的代碼,事件永遠不會達到基類的OnMouseWheel函數。這是一種傳播問題嗎? 我該如何解決這個問題? 謝謝!將wxMouseEvent傳播到wxWidget中的基類

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

if(m_scroll)roEvent.Skip();其他Bar :: OnMouseWheel(roEvent);

+0

非常感謝!但我會說它只是'如果(m_scroll)Bar :: OnMouseWheel(roEvent);' – tzippy

+0

這個答案是錯誤的,沒有必要明確調用基類函數,事實上,它沒有任何意義如果你這樣做,就調用它*不*跳過這個事件處理程序,因爲如果你跳過它,它將被調用。 @ I.I。非常困惑。 –

1

正確的解決方案是不使用虛擬函數,但是相反,使用非虛函數和正確Connect()Bind()兩者Foo::OnMouseWheel()Bar::OnMouseWheel()。 然後做if(m_scroll) roEvent.Skip();就足夠了。 請參閱Event Handlers vs Virtual Methods