ActiveX コントロールは、イベントを発生させ、それ自体とそのコントロール コンテナーの間で通信します。 コンテナーは、メソッドとプロパティを使用してコントロールと通信することもできます。 メソッドは関数とも呼ばれます。
メソッドとプロパティは、オートメーション クライアントや ActiveX コントロール コンテナーなど、他のアプリケーションで使用するためのエクスポートされたインターフェイスを提供します。 ActiveX コントロールのプロパティの詳細については、「 MFC ActiveX コントロール: プロパティ」を参照してください。
メソッドの使用方法と目的は、C++ クラスのメンバー関数と似ています。 コントロールで実装できるメソッドには、ストックとカスタムの 2 種類があります。 ストック イベントと同様に、ストック メソッドは 、COleControl が実装を提供するメソッドです。 ストック メソッドの詳細については、「 MFC ActiveX コントロール: ストック メソッドの追加」を参照してください。 開発者が定義するカスタム メソッドを使用すると、コントロールをさらにカスタマイズできます。 詳細については、「 MFC ActiveX コントロール: カスタム メソッドの追加」を参照してください。
Microsoft Foundation クラス ライブラリ (MFC) は、コントロールがストック メソッドとカスタム メソッドをサポートできるようにするメカニズムを実装します。 最初の部分はクラス COleControl
です。
CWnd
から派生したCOleControl
メンバー関数は、すべての ActiveX コントロールに共通するストック メソッドをサポートします。 このメカニズムの 2 番目の部分はディスパッチ マップです。 ディスパッチ マップはメッセージ マップに似ています。ただし、ディスパッチ マップは、関数を Windows メッセージ ID にマッピングする代わりに、仮想メンバー関数を IDispatch IDS にマップします。
コントロールがさまざまなメソッドを適切にサポートするには、そのクラスでディスパッチ マップを宣言する必要があります。 このコード行によって、コントロール クラス ヘッダー (.H) ファイルで以下が達成されます。
DECLARE_DISPATCH_MAP()
ディスパッチ マップの主な目的は、外部呼び出し元 (コンテナーなど) によって使用されるメソッド名と、メソッドを実装するコントロールのクラスのメンバー関数との間に関係を確立することです。 ディスパッチ マップが宣言されたら、コントロールの実装 (.CPP) ファイルで定義する必要があります。 次のコード行は、ディスパッチ マップを定義します。
BEGIN_DISPATCH_MAP(CMyAxUICtrl, COleControl)
END_DISPATCH_MAP()
MFC ActiveX コントロール ウィザードを使用してプロジェクトを作成した場合、これらの行は自動的に追加されました。 MFC ActiveX コントロール ウィザードが使用されていない場合は、これらの行を手動で追加する必要があります。
次の記事では、メソッドについて詳しく説明します。