次の方法で共有


MFC ActiveX コントロール : カスタム メソッドの追加

カスタム メソッドは、COleControl によって実装されていないという点で、ストック メソッドとは異なります。 コントロールに追加するカスタム メソッドごとに実装を行う必要があります。

重要

ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に取って代わる最新のテクノロジの詳細については、「ActiveX コントロール」を参照してください。

ActiveX コントロール ユーザーは、いつでもカスタム メソッドを呼び出して、コントロール固有のアクションを実行できます。 カスタム メソッドのディスパッチ マップ エントリの形式は、DISP_FUNCTION です。

メソッドの追加ウィザードを使用したカスタム メソッドの追加

次の手順では、カスタム メソッド PtInCircle を ActiveX コントロールのスケルトン コードに追加する方法を示します。 PtInCircle は、コントロールに渡される座標が円の内側か外側かを決定します。 これと同じ手順を使用して、他のカスタム メソッドを追加することもできます。 PtInCircle のメソッド名とパラメーターを、使用するカスタム メソッド名とそのパラメーターに置き換えます。

Note

この例では、「イベント」記事の InCircle 関数を使用します。 この関数の詳細については、「MFC ActiveX コントロール: ActiveX コントロールへのカスタム イベントの追加」を参照してください。

メソッドの追加ウィザードを使用して PtInCircle カスタム メソッドを追加するには

  1. コントロールのプロジェクトを読み込みます。

  2. [クラス ビュー] で、コントロールのライブラリ ノードを展開します。

  3. コントロールのインターフェイス ノード (ライブラリ ノードの 2 番目のノード) を右クリックし、ショートカット メニューを開きます。

  4. ショートカット メニューの [追加][メソッドの追加] の順にクリックします。

    これにより、メソッ追加ウィザードが開きます。

  5. [メソッド名] ボックスに「PtInCircle」と入力します。

  6. [内部名] ボックスに、メソッドの内部関数の名前を入力するか、既定値 (この場合は PtInCircle) を使用します。

  7. [戻り値の型] ボックスで、メソッドの戻り値の型として [VARIANT_BOOL] をクリックします。

  8. [パラメーターの型][パラメーター名] コントロールを使用して、xCoord という名前のパラメーターを追加します (型は OLE_XPOS_PIXELS)。

  9. [パラメーターの型][パラメーター名] コントロールを使用して、yCoord という名前のパラメーターを追加します (型は OLE_YPOS_PIXELS)。

  10. [完了] をクリックします。

メソッド追加ウィザードでのカスタム メソッドの変更

カスタム メソッドを追加すると、メソッドの追加ウィザードによって、コントロール クラス ヘッダー (.H) と実装 (.CPP) ファイルにいくつかの変更が加えられます。 コントロール クラス ヘッダー (.H) ファイルのディスパッチ マップ宣言に次の行が追加されます。

VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

このコードは、PtInCircle というディスパッチ メソッド ハンドラーを宣言します。 この関数は、外部名 PtInCircle を使用してコントロール ユーザーが呼び出すことができます。

次の行が、コントロールの .IDL ファイルに追加されます。

[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

この行により、PtInCircle メソッドが特定の ID 番号、メソッドの追加ウイザード メソッドのメソッドの位置、およびプロパティ リストに割り当てられます。 メソッドの追加ウィザードを使用してカスタム メソッドを追加したため、そのエントリはプロジェクトの .IDL ファイルに自動的に追加されました。

また、コントロール クラスの実装 (.CPP) ファイルにある次の行が、コントロールのディスパッチ マップに追加されます。

DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

DISP_FUNCTION マクロは、メソッド PtInCircle をコントロールのハンドラー関数、PtInCircle にマップし、戻り値の型を VARIANT_BOOL として宣言し、VTS_XPOS_PIXELS 型と VTS_YPOSPIXELS 型の 2 つのパラメーターが PtInCircle に渡されるように宣言します。

最後に、メソッドの追加ウィザードはスタブ関数 CSampleCtrl::PtInCircle を、コントロールの実装 (.CPP) ファイルの一番下に追加します。 前述のように PtInCircle を機能させるために、それを次のように修正する必要があります。

VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   CPoint point(xCoord, yCoord);
   return InCircle(point);
}

関連項目

MFC ActiveX コントロール
[クラス ビュー] ウィンドウとオブジェクト ブラウザーのアイコン