共用方式為


逐步解說:將控制項放在工具列上

本文說明如何將包含 Windows 控制項的工具列按鈕新增至工具列。 在 MFC 中,工具列按鈕必須是 CMFCToolBarButton 類別衍生類別,例如 CMFCToolBarComboBoxButton 類別 、CMFCToolBarEditBoxButton 類別 CMFCDropDownToolbarButton 類別或 CMFCToolBarMenuButton 類別

將控制項加入至工具列

若要將控制項加入至工具列,請依照下列步驟執行:

  1. 為父工具列資源的按鈕保留假的資源 ID。 如需如何在 Visual Studio 中使用 工具列編輯器 建立按鈕的詳細資訊,請參閱 工具列編輯器 一文。

  2. 為父工具列的所有點陣圖中的按鈕保留工具列按鈕影像 (按鈕圖示)。

  3. 在處理訊息的 AFX_WM_RESETTOOLBAR 訊息處理常式中,執行下列步驟:

    1. 使用 CMFCToolbarButton 衍生類別建構按鈕控制項。

    2. 使用 CMFCToolBar::ReplaceButton ,將虛擬按鈕取代為新的控制項。 由於 ReplaceButton 會複製按鈕物件並維護複本,您可以在堆疊上建構按鈕物件。

注意

如果您在應用程式中啟用自訂功能,您可能必須使用 [自訂 ] 對話方塊的 [工具列 ] 索引標籤上的 [重 設] 按鈕來重設工具列 ,才能在重新編譯之後查看應用程式中的更新控制項。 工具列狀態儲存在 Windows 登錄中,且 ReplaceButton 方法在應用程式啟動期間執行後,登錄資訊會被載入並套用。

工具列控制項和自訂

[ 自訂 ] 對話方塊的 [命令] 索引 標籤包含應用程式中可用的命令清單。 根據預設,[ 自訂 ] 對話方塊會處理應用程式功能表,並在每個功能表類別中建置標準工具列按鈕清單。 若要保留工具列控制項所提供的擴充功能,您必須在 [自訂 ] 對話方塊中,將標準工具列按鈕取代為自訂控制項

當您啟用自訂時,您可以使用 CMFCToolBarsCustomizeDialog 類別 ,在自訂處理常式 OnViewCustomize 中建立 [自訂 ] 對話方塊。 在顯示 [ 自訂] 對話方塊之前,請先呼叫 CMFCToolBarsCustomizeDialog::Create 、呼叫 CMFCToolBarsCustomizeDialog::ReplaceButton ,以新控制項取代標準 按鈕。

範例:建立搜尋下拉式方塊

本節說明如何建立 工具列上出現的 [尋找 ] 下拉式方塊控制項,並包含最近使用的搜尋字串。 使用者可以在控制項中輸入字串,然後按 ENTER 鍵搜尋文件,或按 Esc 鍵將焦點移回主框架。 此範例假設檔會顯示在 CEditView 類別 衍生檢視中

建立尋找控制項

首先,建立 [ 尋找 下拉式方塊] 控制項:

  1. 將按鈕和其命令加入至應用程式資源:

    1. 在應用程式資源中,將具有 ID_EDIT_FIND 命令 ID 的新按鈕加入至應用程式的工具列,以及任何與工具列相關的點陣圖。

    2. 使用命令識別碼建立新的功能表項目 ID_EDIT_FIND

    3. 將新字串「Find the text\nFind」加入至字串資料表,並將ID_EDIT_FIND_COMBO 命令 ID 指派給它。 此識別碼將做為 [尋找 下拉式方塊] 按鈕的 命令識別碼。

      注意

      由於 ID_EDIT_FIND 是由 CEditView 處理的標準命令,因此您不需要實作這個命令的特殊處理常式。 不過,您必須實作新命令 ID_EDIT_FIND_COMBO 的處理常式。

  2. 建立衍生自 CComboBox 類別的新類別。 CFindComboBox

  3. CFindComboBox類別中,覆寫 PreTranslateMessage 虛擬方法。 此方法可讓下拉式方塊處理 WM_KEYDOWN 訊息。 如果使用者點閱 Esc 鍵 (VK_ESCAPE),便會將焦點移回主框架視窗。 如果使用者點閱 ENTER 鍵 (VK_ENTER),便會將包含 WM_COMMAND 命令 ID 的 ID_EDIT_FIND_COMBO 訊息張貼到主框架視窗內。

  4. 建立 [尋找 下拉式方塊] 按鈕的 類別,其衍生自 CMFCToolBarComboBoxButton 類別 。 在此範例中,其名稱是 CFindComboButton

  5. CMFCToolbarComboBoxButton 的建構函式接受三個參數:按鈕的命令 ID、按鈕影像索引和下拉式方塊樣式。 設定這些參數,如下所示:

    1. 傳遞 ID_EDIT_FIND_COMBO 做為命令 ID。

    2. 使用 CCommandManager::GetCmdImage 搭配 ID_EDIT_FIND 來取得影像索引。

    3. 如需可用的下拉式方塊樣式清單,請參閱 下拉式列示方塊樣式

  6. CFindComboButton 類別中,覆寫 CMFCToolbarComboBoxButton::CreateCombo 方法。 您應該建立 CFindComboButton 物件,並將指標傳回給該物件。

  7. 使用 IMPLEMENT_SERIAL 宏讓下拉式按鈕持續運作。 工作區管理員會自動載入,並將按鈕狀態儲存在 Windows 登錄中。

  8. 實作您文件檢視中的 ID_EDIT_FIND_COMBO 處理常式。 搭配使用 CMFCToolBar::GetCommandButtons ID_EDIT_FIND_COMBO 擷取所有 [尋找 ] 下拉式方塊按鈕。 有了自訂功能,即可用相同命令 ID 建立數個按鈕複本。

  9. 在訊息處理常式中 ID_EDIT_FIND ,使用 CMFCToolBar::IsLastCommandFromButton 來判斷是否已從 [尋找 ] 下拉式方塊按鈕傳送尋找 OnFind 命令。 如果是,請尋找文字並將搜尋字串加入至下拉式方塊。

將尋找控制項加入至主要工具列

若要將下拉式方塊按鈕加入至工具列,請依照下列步驟執行:

  1. 實作主框架視窗的 AFX_WM_RESETTOOLBAR 訊息處理常式 OnToolbarReset

    注意

    在應用程式啟動期間工具列初始化時,或當工具列在自訂期間重設時,架構會傳送訊息至主框架視窗。 不論是哪一種情況,您都必須將標準工具列按鈕取代為自訂 [尋找 ] 下拉式方塊按鈕。

  2. 在處理常式中 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 類別