カスタム メソッドは、 COleControl
によってまだ実装されていないという点で、ストック メソッドとは異なります。 コントロールに追加するカスタム メソッドごとに実装を指定する必要があります。
Von Bedeutung
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に代わる最新のテクノロジの詳細については、「 ActiveX コントロール」を参照してください。
ActiveX コントロール ユーザーは、コントロール固有のアクションを実行するために、いつでもカスタム メソッドを呼び出すことができます。 カスタム メソッドのディスパッチ マップ エントリは、フォーム DISP_FUNCTIONです。
メソッドの追加ウィザードを使用したカスタム メソッドの追加
次の手順では、カスタム メソッド PtInCircle を ActiveX コントロールのスケルトン コードに追加する方法を示します。 PtInCircle は、コントロールに渡される座標が円の内側か外側かを決定します。 この同じ手順を使用して、他のカスタム メソッドを追加することもできます。 カスタム メソッド名とそのパラメーターを PtInCircle メソッド名とパラメーターに置き換えます。
注
この例では、記事 Events の InCircle
関数を使用します。 この関数の詳細については、「 MFC ActiveX コントロール: カスタム イベントを ActiveX コントロールに追加する」を参照してください。
メソッドの追加ウィザードを使用して PtInCircle カスタム メソッドを追加するには
コントロールのプロジェクトを読み込みます。
クラス ビューで、コントロールのライブラリ ノードを展開します。
コントロールのインターフェイス ノード (ライブラリ ノードの 2 番目のノード) を右クリックして、ショートカット メニューを開きます。
ショートカット メニューの [ 追加 ] をクリックし、[ メソッドの追加] をクリックします。
メソッドの追加ウィザードが開きます。
[ メソッド名 ] ボックスに「 PtInCircle」と入力します。
[ 内部名 ] ボックスに、メソッドの内部関数の名前を入力するか、既定値 (この場合は PtInCircle) を使用します。
戻り値の型 ボックスで、メソッドの戻り値の型として VARIANT_BOOL をクリックします。
パラメーター型コントロールとパラメーター名コントロールを使用して、xCoord (型OLE_XPOS_PIXELS) というパラメーターを追加します。
[パラメーターの種類] コントロールと [パラメーター名] コントロールを使用して、yCoord (型OLE_YPOS_PIXELS) というパラメーターを追加します。
[完了] をクリックします。
カスタムメソッド用追加ウィザードの変更
カスタムメソッドを追加すると、メソッドの追加ウィザードによってコントロールクラスヘッダー (.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);
}