使用者定義工具
MFC 支援使用者定義的工具。 使用者自訂的工具是一個特殊的命令執行外部、 使用者定義的程式。 您可以使用自訂程序來管理使用者自訂工具。 不過,您無法使用此程序如果您的應用程式物件不衍生自CWinAppEx 類別。 如需有關自訂的詳細資訊,請參閱MFC 的自訂。
如果您啟用了使用者定義工具支援,[自訂] 對話方塊會自動地包含工具 索引標籤。 下圖顯示工具頁面。
自訂對話方塊的 [工具索引標籤
啟用使用者定義工具支援
若要啟用應用程式中的使用者定義工具,請呼叫CWinAppEx::EnableUserTools。 不過,必須先定義數個常數做為參數使用這個呼叫的應用程式的資源檔中。
在資源編輯器中建立空的命令,使用適當的命令 id。 在下列範例中,我們使用ID_TOOLS_ENTRY 為命令 id。 這個命令 ID 會標示在一或多個功能表上,架構會在該處插入的使用者自訂工具的位置。
您必須設定撥出一些連續的識別碼來代表使用者定義工具字串資料表中。 您設定撥出的字串數目等於使用者工具,讓使用者定義的最大數目。 在下列範例中,這些名為ID_USER_TOOL1到ID_USER_TOOL10。
您可以提供建議給使用者,以幫助他們依工具選取目錄] 和 [外部程式會被呼叫的引數。 若要執行這項操作,請在資源編輯器中建立兩個跳現式功能表。 如下例所示,這些具名IDR_MENU_ARGS和IDR_MENU_DIRS。 在這些功能表中的每一個命令,來定義您的應用程式字串資料表中的一個字串。 字串的資源識別碼必須等於命令 id。
您也可以建立衍生的類別從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 相符之ID_TOOLS_ENTRY在任何具有集合的目前定義的使用者工具,每當使用者開啟該功能表的功能表。 命令 Id ID_USER_TOOL1到ID_USER_TOOL10是保留供使用者自訂工具的使用。 類別CUserTool 類別處理呼叫使用者工具。 [工具] 索引標籤的自訂對話方塊提供按鈕來存取功能表的 [引數及目錄] 輸入欄位右側IDR_MENU_ARGS和IDR_MENU_DIRS。將當使用者選取其中一個這些功能表命令時,架構至適當的文字方塊中字串附加具有的資源 ID 等於命令 id。
包括預先定義的工具
如果您想要在應用程式啟動的一些工具會預先定義,您必須覆寫CFrameWnd::LoadFrame應用程式的主視窗的方法。 在該方法中,您必須執行下列步驟。
若要在 LoadFrame 中加入新的工具
取得變數的指標, CUserToolsManager 類別物件藉由呼叫CWinAppEx::GetUserToolsManager。
對於每個您想要建立的工具,呼叫CUserToolsManager::CreateNewTool。 這個方法會傳回變數的指標, CUserTool 類別物件,並將新建立的使用者工具加入至工具的內部集合。 如果您所提供的衍生類別的執行階段資訊CUserTool 類別做為第四個參數的CWinAppEx::EnableUserTools, CUserToolsManager::CreateNewTool會具現化,而是傳回該類別的執行個體。
對於每一種工具,來設定其文字的標籤設定CUserTool::m_strLabel ,並設定其命令,藉由呼叫CUserTool::SetCommand。 預設實作的CUserTool 類別會自動擷取與該程式的呼叫中所指定的 [可用的圖示SetCommand。