次の方法で共有


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

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

Von Bedeutung

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

ActiveX コントロール ユーザーは、コントロール固有のアクションを実行するために、いつでもカスタム メソッドを呼び出すことができます。 カスタム メソッドのディスパッチ マップ エントリは、フォーム DISP_FUNCTIONです。

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

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

この例では、記事 Events の 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 コントロール
クラス ビューとオブジェクト ブラウザーのアイコン