Share via


ユーザー定義のツール

MFC は、ユーザー定義ツールをサポートしています。 ユーザー定義ツールは、外部のユーザー指定プログラムを実行する特殊なコマンドです。 カスタマイズ プロセスを使用して、ユーザー定義ツールを管理できます。 ただし、アプリケーション オブジェクトが CWinAppEx クラスから派生していない場合は、このプロセスを使用できません。 カスタマイズの詳細については、「MFC のカスタマイズ」を参照してください。

ユーザー定義ツールのサポートが有効になっている場合は、[カスタマイズ] ダイアログ ボックスに [ツール] タブが自動的に表示されます。次の図は、[ツール] ページを示しています。

Tools tab in the Customize dialog box.
[カスタマイズ] ダイアログ ボックスの [ツール] タブ

ユーザー定義ツールのサポートの有効化

アプリケーションでユーザー定義ツールを有効にするには、CWinAppEx::EnableUserTools を呼び出します。 ただし、先に、アプリケーションのリソース ファイルで、この呼び出しのパラメーターとして使用する、いくつかの定数を定義する必要があります。

リソース エディターで、該当するコマンド ID を使用するダミー コマンドを作成します。 次の例では、ID_TOOLS_ENTRY をコマンド ID として使用します。 このコマンド ID は、フレームワークがユーザー定義ツールを挿入する 1 つ以上のメニュー内の場所を示します。

ユーザー定義ツールを表す文字列テーブルで、連続する ID を確保する必要があります。 確保する文字列の数は、ユーザーが定義可能なユーザー ツールの最大数と同じです。 次の例では、これらが ID_USER_TOOL1 から ID_USER_TOOL10 で指定されます。

ツールとして呼び出される外部プログラムのディレクトリと引数の選択を容易にする提案をユーザーに提供できます。 これを行うには、リソース エディターで 2 つのポップアップ メニューを作成します。 次の例では、これらが IDR_MENU_ARGSIDR_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 の ID_USER_TOOL1 から ID_USER_TOOL10 は、ユーザー定義ツールで使用するために予約されています。 CUserTool クラスは、ユーザー ツールの呼び出しを処理します。 [カスタマイズ] ダイアログ ボックスの [ツール] タブでは、引数フィールドとディレクトリ エントリ フィールドの右側にメニューの IDR_MENU_ARGSIDR_MENU_DIRS にアクセスするためのボタンが表示されます。ユーザーがこれらのメニューのいずれかからコマンドを選択すると、フレームワークが、コマンド ID と一致するリソース ID を持つ文字列を該当するテキスト ボックスに追加します。

定義済みのツールのインクルード

アプリケーションの起動時にいくつかのツールを事前に定義したい場合は、アプリケーションのメイン ウィンドウの CFrameWnd::LoadFrame メソッドをオーバーライドする必要があります。 そのメソッドで、次の手順を実行する必要があります。

LoadFrame で新しいツールを追加するには
  1. CWinAppEx::GetUserToolsManager を呼び出すことによって、CUserToolsManager クラス オブジェクトへのポインターを取得します。

  2. 作成するツールごとに、CUserToolsManager::CreateNewTool を呼び出します。 このメソッドは、CUserTool クラス オブジェクトへのポインターを返し、新しく作成されたユーザー ツールをツールの内部コレクションに追加します。 CWinAppEx::EnableUserTools の第 4 パラメーターとして CUserTool クラスの派生クラスに関するランタイム情報を指定した場合は、代わりに CUserToolsManager::CreateNewTool がそのクラスのインスタンスを作成して、それを返します。

  3. ツールごとに、CUserTool::m_strLabel を設定してテキスト ラベルを設定し、CUserTool::SetCommand を呼び出してコマンドを設定します。 CUserTool クラスの既定の実装は、SetCommand の呼び出しで指定されたプログラムから使用可能なアイコンを自動的に取得します。

関連項目

MFC のカスタマイズ
CUserTool クラス
CUserToolsManager クラス
CWinAppEx クラス