<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 功能強大 支持多語言、二開方便! 廣告
                # 2.4 事件處理函數 你也許已經注意到了,事件處理函數在MyFrame類中不是虛函數。如果不是虛函數,他們是怎樣被調用的呢?答案就在下面的事件表里: ``` BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) EVT_MENU(wxID_EXIT, MyFrame::OnQuit) END_EVENT_TABLE() ``` 所謂事件表,是一組位于類的實現文件(.cpp文件)中的宏,用來告訴wxWidgets來自用戶或者其它地方的事件應該怎樣和類的成員函數對應起來。 前面展示的事件表表明,要把鼠標點擊標識分別為wxID_EXIT和wxID_ABOUT的菜單項的事件和MyFrame的成員函數OnAbout和 OnQuit關聯起來。這里的EVT_MENU宏只是很多中事件宏的其中之一,事件宏的作用是告訴wxWidgets哪種事件應該被關聯到哪個成員函數。這里的兩個標識wxID_ABOUT和wxID_EXIT是wxWidgets預定義的宏,通常你應該通過枚舉,常量或者預編譯宏的方式定義你自己的標識。 用上面的方法定義的時間表是一種靜態的事件表,它不可以在運行期改變,在下一章里,我們將描述怎樣定義可以在運行期改變的動態事件表。 現在,讓我們來看看這兩個事件處理函數. ``` void MyFrame::OnAbout(wxCommandEvent& event) { wxString msg; msg.Printf(wxT("Hello and welcome to %s"), wxVERSION_STRING); wxMessageBox(msg, wxT("About Minimal"), wxOK | wxICON_INFORMATION, this); } void MyFrame::OnQuit(wxCommandEvent& event) { Close(); } ``` 當用戶點擊關于菜單項的時候,MyFrame::OnAbout函數彈出一個消息框。這用到了wxWidgets提供的API wxMessageBox,它的四個參數分別代表消息內容,標題,窗口類型以及父窗口。 當用戶點擊退出菜單項的時候,MyFrame::OnQuit函數被調用(你已經意識到了,這是事件表的功勞)。它調用wxFrame類的Close函數來釋放frame窗口。因為沒有別的窗口存在了,這觸發了應用程序的退出,實際上,wxFrame類的Close函數并不直接關閉 frame窗口,而是產生一個wxEVT_CLOSE_WINDOW事件,這個事件默認的處理函數調用wxWindow::Destroy函數釋放了 frame窗口。 用戶還可以通過別的方法關掉應用程序,比如通過點擊標題欄上的關閉按鈕或者是通過系統菜單中的關閉菜單,在這種情況下,OnQuit函數是怎樣被調用的呢?事實上,在這種情況,OnQuit函數并沒有被調用。這時,wxWidgets會通過Close函數(象OnQuit中的那樣),給 frame窗口發送一個wxEVT_CLOSE_WINDOW事件,這個事件默認的處理函數會釋放掉frame窗口。在你的應用程序中,可以通過重載這個處理函數來增加改變這種默認的行為,比如:如果你想問一問你的用戶是不是真的要關閉窗口。關于這種處理的細節,可以參見第4章,"窗口基礎"。 另外,大多數的應用程序類還應該重載一個OnExit函數,以便在任何時候程序退出時,執行一下清理和資源回收的動作。需要注意的是,這個函數只有在OnInit函數返回真的時候才會被執行。當然,我們這個小例子程序就用不著定義這個函數了。
                  <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>

                              哎呀哎呀视频在线观看