[英]Handling events from wxTextCtrl on wxFrame - C++/wxWidgets
我有一個派生自wxFrame
的MyFrame
。 一個wxTextCtrl
被添加到這個框架中。 我可以在框架中處理此文本控件的EVT_KEY_DOWN
嗎? 就像是,
BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
EVT_KEY_DOWN(MyFrame::OnKeyDown)
END_EVENT_TABLE()
上面的代碼似乎不起作用。 文檔說這樣的事件只能由事件起源的 object 處理。 那么我應該wxTextCtrl
來處理這個問題並以某種方式將信息發送到框架嗎?
這樣做的最佳方法是什么?
來自子控件的wxCommandEvent
和wxNotifyEvent
類型事件被設置為自動向上傳播到父框架。 但是, wxKeyEvent
是從wxEvent
派生的,因此它不會傳播到父框架。 好吧,您可以使用動態事件處理程序將一些事件路由到任何wxEvtHandler
派生對象。
在 wxWidgets 2.8 下,您應該使用wxEvtHandler::Connect
。 此處描述了此方法。 您還可以查看此示例代碼。
在 wxWidgets 2.9 和 SVN 下,您應該使用wxEvtHandler::Bind<>
:
MyFrame::MyFrame(...)
{
m_textcontrol->Bind(wxEVT_KEY_DOWN, &MyFrame::OnTextControlKeyDown, this);
}
wxEvtHandler::Bind<>
方法 在此處描述。
是的,子類 wxtextCtrl 來處理父框架中的按鍵。
class cSpecialTextCtrl : public wxTextCtrl
{
public:
cSpecialTextCtrl( ... ) : wxTextCtrl( ... ) {}
void OnKeyDown( wxKeyEvent& ev );
private:
DECLARE_EVENT_TABLE()
};
而且當然
BEGIN_EVENT_TABLE( cSpecialTextCtrl , wxTextCtrl)
EVT_KEY_DOWN( cSpecialTextCtrl ::OnKeyDown)
END_EVENT_TABLE()
在方法中,將事件傳遞給您的 MyFrame
void cSpecialTextCtrl::OnKeyDown( wxKeyEvent& ev )
{
((MyFrame*)GetParent())->OnKeyDown( ev );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.