ユーザー定義のツール

更新 : 2007 年 11 月

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

ユーザー定義のツールのサポートを有効にすると、[Customization] ダイアログ ボックスに自動的に [Tools] タブが組み込まれます。次の図は、[Tools] ページを示しています。

[Customization] ダイアログ ボックスの [Tools] タブ
カスタム ダイアログ ボックスの [ツール] タブ

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

アプリケーションでユーザー定義のツールを有効にするには、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);

この例では、[Tools] タブは [Customization] ダイアログ ボックスに組み込まれます。フレームワークは、ユーザーがメニューを開くたびに、そのメニューのコマンド ID ID_TOOLS_ENTRY に一致するコマンドを、現在定義されている一連のユーザー ツールに置き換えます。コマンド ID の ID_USER_TOOL1 から ID_USER_TOOL10 は、ユーザー定義のツール用に予約されています。CUserTool クラス クラスは、ユーザー ツールの呼び出しを処理します。[Customization] ダイアログ ボックスの [Tools] タブの引数入力フィールドおよびディレクトリ入力フィールドの右側には、IDR_MENU_ARGS メニューおよび IDR_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 の呼び出しで指定したプログラムから、使用できるアイコンを自動的に取得します。

参照

参照

CUserTool クラス

CUserToolsManager クラス

CWinAppEx クラス