MFC は、ユーザー定義のツールをサポートします。 ユーザー定義のツールは、外部のユーザー指定のプログラムを実行する特殊なコマンドです。 ユーザー定義のツールを管理するには、カスタマイズ処理を使用します。 ただし、アプリケーション オブジェクトが CWinAppEx クラス から派生していない場合、この処理は使用できません。 カスタマイズの詳細については、「MFC のカスタマイズ」を参照してください。
ユーザー定義のツールのサポートを有効にすると、[カスタマイズ] ダイアログ ボックスに自動的に [ツール] タブが組み込まれます。 次の図は、[ツール] ページを示しています。
[カスタマイズ] ダイアログ ボックスの [ツール] タブ
ユーザー定義のツールのサポートの有効化
アプリケーションでユーザー定義のツールを有効にするには、CWinAppEx::EnableUserTools を呼び出します。 ただし、最初にアプリケーションのリソース ファイルで、この呼び出しのパラメーターとして使用されるいくつかの定数を定義する必要があります。
リソース エディターで、適切なコマンド ID を使用するダミー コマンドを作成します。 次の例では、コマンド ID として ID_TOOLS_ENTRY を使用しています。 このコマンド ID は、フレームワークがユーザー定義のツールを挿入する 1 つ以上のメニュー内の位置をマーキングします。
ユーザー定義のツールを表す一連の ID を文字列テーブルで予約する必要があります。 予約する文字列の数は、ユーザーが定義できるユーザー ツールの最大数と同じです。 次の例では、これらは ID_USER_TOOL1 から ID_USER_TOOL10 までです。
ツールとして呼び出される外部プログラムのディレクトリおよび引数をユーザーが選択できるようにできます。 これを行うには、リソース エディターで 2 つのポップアップ メニューを作成します。 次の例では、これらは IDR_MENU_ARGS および IDR_MENU_DIRS です。 これらのメニュー内の各コマンドに対して、アプリケーションの文字列テーブルで文字列を定義します。 文字列のリソース ID は、コマンド ID と一致させる必要があります。
CUserTool クラス の派生クラスを作成して、既定の実装と置き換えることもできます。 これを行うには、4 番目のパラメーターとして、RUNTIME_CLASS (CUserTool クラス) の代わりに、派生クラスのランタイム情報を CWinAppEx::EnableUserTools に渡します。
適切な定数を定義した後、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 メニューにアクセスするためのボタンが用意されます。ユーザーがこれらのメニューの 1 つからコマンドを選択すると、フレームワークによって、コマンド ID と一致するリソース ID の文字列が、該当するテキスト ボックスに追加されます。
定義済みツールの組み込み
アプリケーションの起動時に一部のツールを事前に定義する場合、アプリケーションのメイン ウィンドウの CFrameWnd::LoadFrame メソッドをオーバーライドする必要があります。 このメソッドでは、次の手順を実行する必要があります。
LoadFrame で新しいツールを追加するには
CWinAppEx::GetUserToolsManager を呼び出して CUserToolsManager クラス オブジェクトへのポインターを取得します。
作成する各ツールについて、CUserToolsManager::CreateNewTool を呼び出します。 このメソッドは、CUserTool クラス オブジェクトへのポインターを返し、新しく作成されたユーザー ツールをツールの内部コレクションに追加します。 CWinAppEx::EnableUserTools の 4 番目のパラメーターとして、CUserTool クラス の派生クラスのランタイム情報を指定すると、CUserToolsManager::CreateNewTool は、代わりにそのクラスをインスタンス化して返します。
各ツールについて、CUserTool::m_strLabel を設定することでそのテキスト ラベルを設定し、CUserTool::SetCommand を呼び出すことでそのコマンドを設定します。 CUserTool クラス の既定の実装は、SetCommand の呼び出しで指定したプログラムから、使用できるアイコンを自動的に取得します。