ActiveX コントロール コンテナー : ActiveX コントロールで発生したイベントの処理

この記事では、[プロパティ] ウィンドウ (クラス ビュー) を使用して、ActiveX コントロール コンテナーのに ActiveX コントロールにイベント ハンドラーをインストールすることについて説明します。 イベント ハンドラーは、(コントロールから) 特定のイベントの通知を受信し、応答として何らかのアクションを実行するために使用されます。 この通知は、イベントの "発生" と呼ばれます。

重要

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

Note

この記事では、例として、Container という名前のダイアログベースの ActiveX コントロール コンテナー プロジェクトと、Circ という名前の埋め込みコントロールをプロシージャとコード内で使用します。

[プロパティ] ウィンドウの [イベント] ボタン (クラス ビュー) を使用すると、コントロール コンテナー アプリケーションで発生する可能性があるイベント ActiveX マップを作成できます。 "イベント シンク マップ" と呼ばれるこのマップは、イベント ハンドラーをコントロール コンテナー クラスに追加するときに Visual C++ によって作成および管理されます。 イベント マップ エントリで実装された各イベント ハンドラーは、特定のイベントをコンテナー イベント ハンドラー メンバー関数にマップします。 このイベント ハンドラー関数は、指定したイベントが ActiveX コントロール オブジェクトによって発生される場合に呼び出されます。

イベント シンク マップの詳細については、「クラス ライブラリ リファレンス」「イベント シンク マップ」を参照してください。

プロジェクトに対するイベント ハンドラーの変更

[プロパティ] ウィンドウ を使用してイベント ハンドラーを追加すると、イベント シンク マップが宣言され、プロジェクトで定義されます。 イベント ハンドラーが初めて追加された場合のコントロール CPP ファイルに次のステートメントが追加されます。 このコードは、ダイアログ ボックス クラス (この場合は CContainerDlg) のイベント シンク マップを宣言します:

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()

[プロパティ ] ウィンドウを使用してイベントを追加すると、イベント マップ エントリ (ON_EVENT) がイベント シンク マップに追加され、イベント ハンドラー関数がコンテナーの実装 (.CPP) ファイルに追加されます。

次の例では、Circ コントロールの ClickIn イベントに対して OnClickInCircCtrl と呼ばれるイベント ハンドラーを宣言します:

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
         VTS_I4 VTS_I4)
END_EVENTSINK_MAP()

さらに、次のテンプレートが、イベント ハンドラー メンバー関数の CContainerDlg クラス実装 (.CPP) ファイルに追加されます:

BOOL CContainerDlg::OnClickInCircctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
   // use nX and nY here
   TRACE(_T("nX = %d, nY = %d\n"), nX, nY);
   return TRUE;
}

イベント シンク マクロの詳細については、「クラス ライブラリ リファレンス」「イベント シンク マップ」を参照してください。

イベント ハンドラー関数を作成するには

  1. クラス ビューから、ActiveX コントロールを含むダイアログ クラスを選択します。 この例の場合、CContainerDlg を使用します。

  2. [プロパティ] ウィンドウで、[イベント] ボタンをクリックします。

  3. [プロパティ] ウィンドウで、埋め込み ActiveX コントロールのコントロール ID を選択します。 この例の場合、IDC_CIRCCTRL1 を使用します。

    [プロパティ] ウィンドウには、埋め込み ActiveX コントロールで発生できるイベントの一覧が表示されます。 太字で示されているメンバー関数には、ハンドラー関数が既に割り当て済みです。

  4. ダイアログ クラスで処理するイベントを選択します。 この例では、[クリック] を選択します。

  5. 右側のドロップダウン リスト ボックスで、[ClickCircctrl1 の<>追加] を選択します。

  6. クラス ビューから新しいハンドラー関数をダブルクリックし、CContainerDlg の実装 (.CPP) ファイル内のイベント ハンドラー コードにジャンプします。

関連項目

ActiveX コントロール コンテナー