次の方法で共有


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

Microsoft Foundation Classes (MFC) ライブラリは引き続きサポートされています。 ただし、機能の追加やドキュメントの更新は行われません。

カスタム メソッドは、 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 コントロール
クラス ビューとオブジェクト ブラウザーのアイコン