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;
}
イベント シンク マクロの詳細については、「クラス ライブラリ リファレンス」の「イベント シンク マップ」を参照してください。
イベント ハンドラー関数を作成するには
クラス ビューから、ActiveX コントロールを含むダイアログ クラスを選択します。 この例の場合、
CContainerDlg
を使用します。[プロパティ] ウィンドウで、[イベント] ボタンをクリックします。
[プロパティ] ウィンドウで、埋め込み ActiveX コントロールのコントロール ID を選択します。 この例の場合、
IDC_CIRCCTRL1
を使用します。[プロパティ] ウィンドウには、埋め込み ActiveX コントロールで発生できるイベントの一覧が表示されます。 太字で示されているメンバー関数には、ハンドラー関数が既に割り当て済みです。
ダイアログ クラスで処理するイベントを選択します。 この例では、[クリック] を選択します。
右側のドロップダウン リスト ボックスで、[ClickCircctrl1 の<>追加] を選択します。
クラス ビューから新しいハンドラー関数をダブルクリックし、
CContainerDlg
の実装 (.CPP) ファイル内のイベント ハンドラー コードにジャンプします。