逐步解說:將控制項放在工具列上
本文說明如何將包含 Windows 控制項的工具列按鈕新增至工具列。 在 MFC 中,工具列按鈕必須是 CMFCToolBarButton 類別衍生類別,例如 CMFCToolBarComboBoxButton 類別 、CMFCToolBarEditBoxButton 類別 、 CMFCDropDownToolbarButton 類別或 CMFCToolBarMenuButton 類別 。
將控制項加入至工具列
若要將控制項加入至工具列,請依照下列步驟執行:
為父工具列資源的按鈕保留假的資源 ID。 如需如何在 Visual Studio 中使用 工具列編輯器 建立按鈕的詳細資訊,請參閱 工具列編輯器 一文。
為父工具列的所有點陣圖中的按鈕保留工具列按鈕影像 (按鈕圖示)。
在處理訊息的
AFX_WM_RESETTOOLBAR
訊息處理常式中,執行下列步驟:使用
CMFCToolbarButton
衍生類別建構按鈕控制項。使用 CMFCToolBar::ReplaceButton ,將虛擬按鈕取代為新的控制項。 由於
ReplaceButton
會複製按鈕物件並維護複本,您可以在堆疊上建構按鈕物件。
注意
如果您在應用程式中啟用自訂功能,您可能必須使用 [自訂 ] 對話方塊的 [工具列 ] 索引標籤上的 [重 設] 按鈕來重設工具列 ,才能在重新編譯之後查看應用程式中的更新控制項。 工具列狀態儲存在 Windows 登錄中,且 ReplaceButton
方法在應用程式啟動期間執行後,登錄資訊會被載入並套用。
工具列控制項和自訂
[ 自訂 ] 對話方塊的 [命令] 索引 標籤包含應用程式中可用的命令清單。 根據預設,[ 自訂 ] 對話方塊會處理應用程式功能表,並在每個功能表類別中建置標準工具列按鈕清單。 若要保留工具列控制項所提供的擴充功能,您必須在 [自訂 ] 對話方塊中,將標準工具列按鈕取代為自訂控制項 。
當您啟用自訂時,您可以使用 CMFCToolBarsCustomizeDialog 類別 ,在自訂處理常式 OnViewCustomize
中建立 [自訂 ] 對話方塊。 在顯示 [ 自訂] 對話方塊之前,請先呼叫 CMFCToolBarsCustomizeDialog::Create 、呼叫 CMFCToolBarsCustomizeDialog::ReplaceButton ,以新控制項取代標準 按鈕。
範例:建立搜尋下拉式方塊
本節說明如何建立 工具列上出現的 [尋找 ] 下拉式方塊控制項,並包含最近使用的搜尋字串。 使用者可以在控制項中輸入字串,然後按 ENTER 鍵搜尋文件,或按 Esc 鍵將焦點移回主框架。 此範例假設檔會顯示在 CEditView 類別 衍生檢視中 。
建立尋找控制項
首先,建立 [ 尋找 下拉式方塊] 控制項:
將按鈕和其命令加入至應用程式資源:
在應用程式資源中,將具有
ID_EDIT_FIND
命令 ID 的新按鈕加入至應用程式的工具列,以及任何與工具列相關的點陣圖。使用命令識別碼建立新的功能表項目
ID_EDIT_FIND
。將新字串「Find the text\nFind」加入至字串資料表,並將
ID_EDIT_FIND_COMBO
命令 ID 指派給它。 此識別碼將做為 [尋找 下拉式方塊] 按鈕的 命令識別碼。注意
由於
ID_EDIT_FIND
是由CEditView
處理的標準命令,因此您不需要實作這個命令的特殊處理常式。 不過,您必須實作新命令ID_EDIT_FIND_COMBO
的處理常式。
在
CFindComboBox
類別中,覆寫PreTranslateMessage
虛擬方法。 此方法可讓下拉式方塊處理 WM_KEYDOWN 訊息。 如果使用者點閱 Esc 鍵 (VK_ESCAPE
),便會將焦點移回主框架視窗。 如果使用者點閱 ENTER 鍵 (VK_ENTER
),便會將包含WM_COMMAND
命令 ID 的ID_EDIT_FIND_COMBO
訊息張貼到主框架視窗內。建立 [尋找 下拉式方塊] 按鈕的 類別,其衍生自 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
擷取所有 [尋找 ] 下拉式方塊按鈕。 有了自訂功能,即可用相同命令 ID 建立數個按鈕複本。在訊息處理常式中
ID_EDIT_FIND
,使用 CMFCToolBar::IsLastCommandFromButton 來判斷是否已從 [尋找 ] 下拉式方塊按鈕傳送尋找OnFind
命令。 如果是,請尋找文字並將搜尋字串加入至下拉式方塊。
將尋找控制項加入至主要工具列
若要將下拉式方塊按鈕加入至工具列,請依照下列步驟執行:
實作主框架視窗的
AFX_WM_RESETTOOLBAR
訊息處理常式OnToolbarReset
。注意
在應用程式啟動期間工具列初始化時,或當工具列在自訂期間重設時,架構會傳送訊息至主框架視窗。 不論是哪一種情況,您都必須將標準工具列按鈕取代為自訂 [尋找 ] 下拉式方塊按鈕。
在處理常式中
AFX_WM_RESETTOOLBAR
,檢查工具列識別碼,也就是 AFX_WM_RESETTOOLBAR訊息的 WPARAM 。 如果工具列識別碼等於包含 [尋找 ] 下拉式方塊按鈕的工具列識別碼,請呼叫 CMFCToolBar::ReplaceButton 來取代 [尋找 ] 按鈕(也就是,該按鈕具有CFindComboButton
物件的命令識別碼ID_EDIT_FIND)
。注意
由於
CFindComboBox
會複製按鈕物件並維護複本,因此您可以在堆疊上建構ReplaceButton
物件。
將尋找控制項加入至自訂對話方塊
在自訂處理常式 OnViewCustomize
中,呼叫 CMFCToolBarsCustomizeDialog::ReplaceButton ,以 物件取代 Find 按鈕(也就是命令識別碼 ID_EDIT_FIND
為按鈕)。 CFindComboButton
另請參閱
階層架構圖表
類別
CMFCToolBar 類別
CMFCToolBarButton 類別
CMFCToolBarComboBoxButton 類別
CMFCToolBarsCustomizeDialog 類別