逐步解說: 放置在工具列上的控制項
本主題說明如何加入工具列按鈕包含 Windows 控制項加入工具列。在 MFC 中,工具列按鈕必須是CMFCToolBarButton 類別-例如衍生類別中, CMFCToolBarComboBoxButton 類別, CMFCToolBarEditBoxButton 類別, CMFCDropDownToolbarButton 類別,或CMFCToolBarMenuButton 類別。
將控制項加入至工具列
若要將控制項加入至工具列,請依照下列步驟執行:
保留父代的工具列資源中的按鈕的空的資源 ID。如需有關如何使用工具列編輯器在 Visual Studio 中建立按鈕的詳細資訊,請參閱工具列編輯器主題。
保留所有的父代工具列的點陣圖中按鈕的工具列影像 (按鈕圖示)。
在訊息處理常式中處理AFX_WM_RESETTOOLBAR訊息,請執行下列動作:
[Button] 控制項使用建構的CMFCToolbarButton-衍生的類別。
取代新的控制項中的 [假] 按鈕,藉由使用CMFCToolBar::ReplaceButton。您可以建構的堆疊上的按鈕物件,因為ReplaceButton複製按鈕物件,並會維護該複本。
注意事項 |
---|
如果您啟用自訂應用程式中,您可能要重新設定] 工具列,藉由使用重設 上的按鈕 工具列 索引標籤上的 自訂對話方塊以查看更新的控制項之後需要重新編譯應用程式中。工具列狀態會儲存在 Windows 登錄中,並載入登錄資訊和之後套用ReplaceButton方法會在應用程式啟動時執行。 |
工具列上的控制項和自訂
指令 索引標籤上的 自訂 ] 對話方塊中包含的應用程式中可用的命令清單。根據預設, 自訂 對話方塊會處理應用程式功能表,並建立每個功能表類別中的 [一般] 工具列按鈕的清單。若要保留的工具列上的控制項提供的擴充的功能,必須取代一般] 工具列按鈕中的自訂控制項自訂對話方塊。
當您啟用自訂時,建立自訂 ] 對話方塊中的自訂處理常式OnViewCustomize藉由使用CMFCToolBarsCustomizeDialog 類別類別。顯示之前自訂對話方塊中的,藉由呼叫CMFCToolBarsCustomizeDialog::Create,呼叫CMFCToolBarsCustomizeDialog::ReplaceButton來取代標準的按鈕的新控制項。
範例: 建立尋找下拉式方塊
本章節將告訴您如何建立Find就會出現在工具列上,其中包含最近使用過的搜尋字串的組合方塊控制項。使用者可以在控制項中輸入字串,然後按 enter 鍵,以搜尋文件,或按下 esc 鍵將焦點傳回至主框架。本範例假設文件會顯示在CEditView 類別-衍生檢視。
尋找控制項的建立
首先,建立Find下拉式方塊控制項:
將按鈕和它的命令加入至應用程式資源中:
在應用程式資源中,加入新的按鈕與ID_EDIT_FIND命令至應用程式中的工具列和工具列相關聯的任何點陣圖的識別碼。
建立新的功能表項目使用 ID_EDIT_FIND 命令 id。
加入至字串資料表內的 「 尋找文字 \n 尋找 」 的新字串,並將它指派ID_EDIT_FIND_COMBO命令 id。這個識別碼做為命令 ID 的Find下拉式方塊] 按鈕。
注意事項 因為ID_EDIT_FIND是標準的命令處理的CEditView,您不需要實作特殊的處理常式,此命令。不過,您必須執行 [新增] 命令的處理常式ID_EDIT_FIND_COMBO。
建立新的類別, CFindComboBox、 衍生從CComboBox 類別。
在CFindComboBox類別、 覆寫PreTranslateMessage虛擬方法。這個方法會啟用下拉式方塊,以處理WM_KEYDOWN訊息。如果使用者按 esc 鍵 (VK_ESCAPE),使焦點回到主框架視窗。如果使用者按 Enter 鍵 (VK_ENTER),主框架視窗上張貼WM_COMMAND ,其中包含訊息ID_EDIT_FIND_COMBO命令 id。
建立類別的Find下拉式方塊] 按鈕,衍生自CMFCToolBarComboBoxButton 類別。在這個範例中,也會命名為CFindComboButton。
建構函式的CMFCToolbarComboBoxButton需要三個參數: 按鈕、 按鈕的影像索引,和組合方塊的樣式的命令 ID。需要設定這些參數,如下所示:
傳遞ID_EDIT_FIND_COMBO為命令 id。
使用CCommandManager::GetCmdImage與ID_EDIT_FIND取得的影像索引。
如需可用的下拉式方塊樣式的清單,請參閱下拉式方塊樣式。
在 CFindComboButton 類別中,覆寫 CMFCToolbarComboBoxButton::CreateCombo 方法。您應該在此處建立CFindComboButton物件,並傳回的指標。
使用IMPLEMENT_SERIAL巨集,以使永續性的下拉式按鈕。工作區管理員會自動載入,並在 Windows 登錄中儲存按鈕的狀態。
實作ID_EDIT_FIND_COMBO您的文件檢視中的處理常式。使用CMFCToolBar::GetCommandButtons與ID_EDIT_FIND_COMBO若要擷取所有Find下拉式方塊的按鈕。有鑑於此,自訂可以有幾份按鈕具有相同的命令 ID。
ID_EDIT_FIND 訊息處理常式中OnFind,使用CMFCToolBar::IsLastCommandFromButton來決定是否收到來自 [尋找] 指令Find下拉式方塊] 按鈕。如果是的話,請尋找文字,並將搜尋字串加入至下拉式方塊。
將尋找控制項加入至主工具列
新增至工具列的 [組合方塊] 按鈕,請依照下列步驟執行:
實作AFX_WM_RESETTOOLBAR訊息處理常式OnToolbarReset在主框架視窗中。
注意事項 工具列會在應用程式啟動時初始化,或在自訂期間重設工具列時,架構會傳送這個訊息給主框架視窗。不論是哪一種情況,您必須取代一般] 工具列按鈕與自訂Find下拉式方塊] 按鈕。
在AFX_WM_RESETTOOLBAR處理常式中,也就是檢查工具列 ID、 WPARAM的AFX_WM_RESETTOOLBAR訊息。如果工具列識別碼相同的工具列,包含Find下拉式方塊] 按鈕,請打CMFCToolBar::ReplaceButton來取代Find ] 按鈕 (也就是按鈕的命令 ID 的**ID_EDIT_FIND)**與CFindComboButton物件。
注意事項 您可以建構CFindComboBox物件在堆疊上,因為ReplaceButton複製按鈕物件,並會維護該複本。
將尋找控制項加入至 [自訂] 對話方塊
自訂處理常式中OnViewCustomize,呼叫CMFCToolBarsCustomizeDialog::ReplaceButton來取代Find ] 按鈕 (也就是按鈕的命令 ID 的**ID_EDIT_FIND)**與CFindComboButton物件。
請參閱
參考
CMFCToolBarsCustomizeDialog 類別