使用者定義類型
MFC 支援使用者定義的工具。 使用者定義的工具是執行外部使用者指定程式的特殊命令。 您可以使用自訂程式來管理使用者定義的工具。 不過,如果您的應用程式物件不是衍生自 CWinAppEx 類別 ,您就無法使用此程式。 如需自訂的詳細資訊,請參閱 MFC 的自訂。
如果您已啟用使用者定義的工具支援,自訂對話方塊會自動包含 [ 工具 ] 索引標籤。下圖顯示 [ 工具] 頁面。
[自訂] 對話方塊 [工具] 索引標籤
啟用使用者定義工具支援
若要在應用程式中啟用使用者定義的工具,請呼叫 CWinAppEx::EnableUserTools 。 不過,您必須先在應用程式的資源檔中定義數個常數,以作為此呼叫的參數。
在資源編輯器中,建立使用適當命令識別碼的虛擬命令。 在下列範例中,我們使用 ID_TOOLS_ENTRY
作為命令識別碼。 此命令識別碼會在一或多個功能表中標示架構將插入使用者定義工具的位置。
您必須在字串資料表中保留一些連續識別碼,才能代表使用者定義的工具。 您擱置的字串數目等於使用者可以定義的使用者工具數目上限。 在下列範例中,這些會透過 ID_USER_TOOL10
命名 ID_USER_TOOL1
。
您可以向使用者提供建議,以協助他們為將呼叫為工具的外部程式選取目錄和引數。 若要這樣做,請在資源編輯器中建立兩個快顯功能表。 在下列範例中,這些名稱為 IDR_MENU_ARGS
和 IDR_MENU_DIRS
。 針對這些功能表中的每個命令,定義應用程式字串資料表中的字串。 字串的資源識別碼必須等於命令識別碼。
您也可以從 CUserTool 類別建立衍生類別 ,以取代預設實作。 若要這樣做,請將衍生類別的執行時間資訊傳遞為 CWinAppEx::EnableUserTools 中的第四個參數,而不是RUNTIME_CLASS( CUserTool 類別 )。
定義適當的常數之後,請呼叫 CWinAppEx::EnableUserTools 以啟用使用者定義的工具。
下列方法呼叫示範如何使用這些常數:
EnableUserTools(ID_TOOLS_ENTRY,
ID_USER_TOOL1,
ID_USER_TOOL10,
RUNTIME_CLASS(CUserTool),
IDR_MENU_ARGS,
IDR_MENU_DIRS);
在此範例中,工具索引標籤將會包含在 [ 自訂 ] 對話方塊中。 每當使用者開啟該功能表時,架構會將任何符合任何功能表中命令識別碼 ID_TOOLS_ENTRY
的命令,取代為目前定義之使用者工具集的任何命令。 透過 的 ID_USER_TOOL1
ID_USER_TOOL10
命令識別碼會保留供使用者定義工具使用。 類別 CUserTool 類別 會處理使用者工具的呼叫。 [自訂] 對話方塊的工具 索引標籤提供引數和目錄專案欄位右邊的按鈕,以存取功能表 IDR_MENU_ARGS 和 IDR_MENU_DIRS 。 當使用者從其中一個功能表選取命令時,架構會附加至適當的文字方塊,字串的資源識別碼等於命令識別碼。
包含預先定義的工具
如果您想要在應用程式啟動時預先定義某些工具,您必須覆寫 應用程式主視窗的 CFrameWnd::LoadFrame 方法。 在該方法中,您必須執行下列步驟。
在 LoadFrame 中新增工具
藉由呼叫 CWinAppEx::GetUserToolsManager 取得 CUserToolsManager 類別 物件的指標 。
針對您想要建立的每個工具,呼叫 CUserToolsManager::CreateNewTool 。 這個方法會傳回 CUserTool Class 物件的指標 ,並將新建立的使用者工具新增至工具的內部集合。 如果您提供 CUserTool 類別衍生類別 的執行時間資訊做為 CWinAppEx::EnableUserTools 的第 四個參數, CUserToolsManager::CreateNewTool 會改為具現化並傳回該類別的 實例。
針對每個工具,藉由設定並呼叫
CUserTool::SetCommand
來設定其命令,以設定CUserTool::m_strLabel
其文字標籤。 CUserTool 類別 的預設實作 會自動從呼叫SetCommand
中指定的程式擷取可用的圖示。