ActiveX コントロール コンテナー : ActiveX コントロールで発生したイベントの処理
この技術情報では、 ActiveX コントロール コンテナーに ActiveX コントロールのイベント ハンドラーをインストールするには、プロパティ] ウィンドウを使用する方法について説明します。イベント ハンドラーが特定のイベント通知 (コントロール)から受信し、応答で操作を実行するために使用されます。この通知は 「一致」をイベントと呼ばれます。
[!メモ]
この技術情報は、プロシージャ、およびコードでダイアログ ベースの ActiveX コントロール コンテナー プロジェクトには、という名前の Container と例として 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)ファイルのイベント ハンドラー コードにジャンプするにクラス ビューから新しいハンドラー関数をダブルクリック。