2016-10-19 2 views
0

이벤트가 이미있는 함수를 어떻게 호출합니까?함수에 여러 이벤트를 설정하는 방법

는이 같은 뭔가 함수를 호출 할 수 있도록하려면 :

statsDialog::statsDialog(..) : wxDialog(..) { 
    updateStats(); 
} 

또는, 어떻게 함수에 여러 eventhandlers 바인딩? 예를 들어, UPDATE_STATS_BUTTON을 누르면 wxEVT_SET_FOCUS 이벤트와 함께 updateStats를 호출합니다. 어떻게하면 코드를 복사하지 않고도이 작업을 수행 할 수 있습니까 (updateStats 함수를 복사하여 wxFocusEventHandler으로 변경).

BEGIN_EVENT_TABLE(statsDialog, wxDialog) 
EVT_BUTTON(UPDATE_STATS_BUTTON, statsDialog::updateStats) 
END_EVENT_TABLE() 

statsDialog::statsDialog(..) : wxDialog(..) {  
    // layout stuff 
} 

void 
statsDialog::updateStats(wxCommandEvent& event) { 
    // do stuff on dialog focus AND when UPDATE_STATS_BUTTON is pressed 
} 

답변

0

포커스 및 버튼 이벤트 핸들러에서 모두 이라는 함수를 호출하면됩니다. 특히 C++ 11을 Bind()과 함께 사용할 때 이것은 매우 사소합니다 :

Bind(wxEVT_SET_FOCUS, [](wxFocusEvent& e) { e.Skip(); DoUpdateStats(); }); 
btn->Bind(wxEVT_BUTTON, [](wxCommandEvent&) { DoUpdateStats(); }); 
+0

감사합니다! 작동하지만 컴파일 할 때 대괄호 안에 &를 추가해야했습니다. –

+0

'DoUpdateStats()'가 전역 함수 인 경우 기본 캡처 노드가 필요하지 않지만 멤버 메소드 인 경우에는 (예 : wxEVT_BUTTON, [& wxCommandEvent & '이'를 붙잡을 필요가있다. 그러나 기본 캡처 모드를 사용하는 것보다 명시 적으로 더 잘 수행하는 것이 좋습니다. –

관련 문제