MFC ActiveX コントロール : カスタム メソッドの追加
カスタム メソッドは、COleControl
によって実装されていないという点で、ストック メソッドとは異なります。 コントロールに追加するカスタム メソッドごとに実装を行う必要があります。
重要
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に取って代わる最新のテクノロジの詳細については、「ActiveX コントロール」を参照してください。
ActiveX コントロール ユーザーは、いつでもカスタム メソッドを呼び出して、コントロール固有のアクションを実行できます。 カスタム メソッドのディスパッチ マップ エントリの形式は、DISP_FUNCTION です。
メソッドの追加ウィザードを使用したカスタム メソッドの追加
次の手順では、カスタム メソッド PtInCircle を ActiveX コントロールのスケルトン コードに追加する方法を示します。 PtInCircle は、コントロールに渡される座標が円の内側か外側かを決定します。 これと同じ手順を使用して、他のカスタム メソッドを追加することもできます。 PtInCircle のメソッド名とパラメーターを、使用するカスタム メソッド名とそのパラメーターに置き換えます。
Note
この例では、「イベント」記事の 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);
}