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 クラスから派生クラスを作成して、既定の実装を置き換えることもできます。 これを行うには、派生クラスのランタイム情報を、RUNTIME_CLASS(CUserTool クラス) ではなく CWinAppEx::EnableUserTools の 4 番目のパラメーターとして渡します。
適切な定数を定義したら、 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_USER_TOOL1からID_USER_TOOL10までのコマンド ID は、ユーザー定義ツール用に予約されています。
クラス 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の呼び出しで指定されたプログラムから使用可能なアイコンが自動的に取得されます。
こちらも参照ください
MFC のカスタマイズ
CUserTool クラス
CUserToolsManager クラス
CWinAppEx クラス