<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 3.5 動態事件處理方法 前面我們討論的事件處理方法,都是靜態的事件表,這也是我們處理事件最常用的方式。接下來,我們來討論一下事件表的動態處理,也就是說在運行期改變事件表的映射關系。使用這種事件映射方法的原因,可能是你想在程序運行的不同時刻使用不同的映射關系,或者因為你使用的那種語言(例如python)不支持靜態映射,或者僅僅是因為你更喜歡動態映射。因為動態映射的方法可以使你更精確的控制事件表的細節,你甚至可以單獨的將事件表中的某一個條目在運行期打開或者關閉,而前面說的PushEventHandler和PopEventHandler的方法只能針對整個事件表進行處理。除此以外,動態事件處理還允許你在不同的類之間共享事件函數。 和動態事件處理相關的API有兩個:wxEvtHandler::Connect和wxEvtHandler::Disconnect。大多數情況下你不需要手動調用wxEvtHandler::Disconnect函數,這個函數將在窗口類被釋放的時候自動。 下面我們還用前面的MyFrame類來舉例說明: ``` class MyFrame : public wxFrame { public: MyFrame(const wxString& title); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); private: }; ``` 你可能已經注意到,這次我們沒有使用DECLARE_EVENT_TABLE來聲明一個事件表。為了動態進行事件映射,我們需要在OnInit函數中增加下面的代碼: ``` frame->Connect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit) ); frame->Connect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnAbout) ); ``` 我們傳遞給Connect函數的三個參數分別為菜單標識符,事件標識符和事件處理函數指針。要注意這里的事件標識符 wxEVT_COMMAND_MENU_SELECTED不同于前面在靜態事件表中用于表示事件映射的宏EVT_MENU,實際上EVT_MENU內部也使用了wxEVT_COMMAND_MENU_SELECTED.EVT_MENU其實也自動包含了用于對事件處理指針類型強制轉換的宏 wxCommandEventHandler()。一般說來,如果事件處理函數的參數類型是wxXYZEvent,那么其處理函數的類型就應該用 wxXYZEventHandler宏進行強制轉換. 如果我們希望在某個時候中止上面的事件映射,可以使用下面的方法: ``` frame->Disconnect( wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit) ); frame->Disconnect( wxID_ABOUT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventFunction(MyFrame::OnAbout) ); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看