2016-01-21 1 views
0

У меня есть производный класс, в котором я хочу пропустить события колесика мыши в зависимости от параметра bool. Поэтому, если я установил bScroll = true, я хочу, чтобы панель базового класса обрабатывала события 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(); else Bar :: OnMouseWheel (roEvent);

+0

Большое спасибо! Но я бы сказал, что его Just 'if (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