<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 功能強大 支持多語言、二開方便! 廣告
                # 20.2 更改事件處理機制 在通常情況下,wxWidgets將事件發送到產生這個事件的窗口(或者別的事件處理器).對于命令事件,還將以特定的方式遍歷整個窗口繼承樹(詳情參考附錄H,"wxWidgets的事件處理機制")來處理.舉例來說,如果你點擊工具條上的任何一個工具按鈕,產生的事件將首先發送給這個工具按鈕的事件表處理,然后是包含這個工具條的frame窗口的時間表,然后是整個應用程序類的事件表.通常情況下,這樣的作法是滿足要求的,但是如果有時候,你希望超過一個控件都可以使用工具條上的拷貝命令的時候,就會有一些問題,比如,你的主程序中有一個主窗口(假設是一個繪畫程序)和一個文本編輯框,這個文本編輯框可能永遠也無法處理工具條上的拷貝命令,因為這個命令并不會調用這個編輯框的事件處理函數.在這種情況下,你可能希望事件能夠首先交給當前處于活動狀態的控件處理,然后再按照正常的處理順序執行.這樣,如果當前的活動控件內部實現了針對這個事件的處理函數(比如wxID_COPY),那么這個函數就將被調用,否則就在窗口繼承樹中向上查找對應的處理函數,直到它找到一個這樣的函數.這種命令總是針對當前活動控件的作法會更符合用戶的使用習慣. 我們可以通過下面的方法重載主窗口的ProcessEvent函數,以便攔截命令事件并將其首先交給當前活動的控件處理,如下所示: ``` bool MainFrame::ProcessEvent(wxEvent& event) { static wxEvent* s_lastEvent = NULL; // 避免死循環 if (& event == s_lastEvent) return false; if (event.IsCommandEvent() && !event.IsKindOf(CLASSINFO(wxChildFocusEvent)) && !event.IsKindOf(CLASSINFO(wxContextMenuEvent))) { s_lastEvent = & event; wxControl *focusWin = wxDynamicCast(FindFocus(), wxControl); bool success = false; if (focusWin) success = focusWin->GetEventHandler() ->ProcessEvent(event); if (!success) success = wxFrame::ProcessEvent(event); s_lastEvent = NULL; return success; } else { return wxFrame::ProcessEvent(event); } } ``` 就目前的情況來看,這種作法在那些當前活動控件可能為一個wxTextCtrl控件的時候顯的更有用(在大多數平臺上), wxWidgets為這種控件實現了多種內置的命令,包括wxID_COPY, wxID_CUT, wxID_PASTE, wxID_UNDO和wxID_REDO,還實現了一些默認的用戶界面行為.不過,你也可以給任意的控件通過實現其派生類的方式增加這些默認的事件處理函數,比如說wxStyledTextCtrl控件(參考examples/chap20/pipedprocess中的例子,這個例子為 wxStyledTextCtrl控件提供了這種增強處理).
                  <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>

                              哎呀哎呀视频在线观看