複合コントロールに必要なコントロールを挿入すると、新しい機能を追加、次の手順が含まれます。この新しい機能は、通常 2 つのカテゴリに分類されます。:
目的とこの記事の範囲については、このセクションの残りの部分は、イベント処理にのみ焦点を当ててください。
含まれているコントロールからのイベントを処理するごと、イベント ディスパッチ インターフェイスから派生することによって実装する必要があります、 IDispEventImplテンプレート クラス。この派生での複合コントロールの宣言が行われ、の 2 つのパラメーターで構成されています
基本クラス宣言では、次の例コード ライン、 IDispEventImplインターフェイスのコントロールを宣言 ( IDC_CIRCCTRL1 )、複合コントロール クラス ( CMyCompositeCtrl )。
公共の IDispEventImpllt、IDC_CIRCCTL1、CMyCompositeCtrl & gt(&L);
イベント クラスごとに含まれるコントロールのディスパッチを宣言した後、イベント シンク マップを複合コントロール オブジェクトに追加する必要があります。このマップの 2 つを達成します。:
いくつかの定義済みマクロを使用して、イベント シンク マップを実装します。:
BEGIN_SINK_MAP(CtrlName)
CtrlName複合コントロールのイベント シンク マップの開始位置を宣言します。
SINK_ENTRY(CtrlID, DispIID, dispID, EventHandler)
指定されたイベント (dispID) のハンドラー関数 (イベント ハンドラー) のディスパッチ インターフェイスDispIID、 CtrlIDによって識別されるコントロールの宣言します。
CtrlName複合コントロールのイベント シンク マップの終了を宣言します。
コード例を次に示します (には。複合コントロールの CPP ファイル) はイベント シンク マップの宣言、 CMyCompositeCtrl オブジェクト。2 つのイベント ハンドラーを 2 つ含まれているコントロールを宣言 ( IDC_CIRCCTL1 および IDC_CIRCCTL2 )。両方のコントロールのクリック イベントを処理、 OnClick_CircCtrl1 と OnClick_CircCtrl2 関数。
BEGIN_SINK_MAP(CMyCompositeCtrl)特価;SINK_ENTRY (IDC_CIRCCTL1、DISPID_CLICK、OnClick_CircCtrl1)SINK_ENTRY (IDC_CIRCCTL2、DISPID_CLICK、OnClick_CircCtrl2)END_SINK_MAP()(&N)
イベント シンク マップを宣言した後は、複合コントロールのイベント ハンドラーを実装する手順を実行します。
イベント シンク マップ ステップの宣言では、2 つ含まれている Circ コントロールの 2 つのイベント ハンドラーを宣言、新しいマップを追加します。これらのハンドラーを実装する時間になりました。形式は次のとおりです。:
retVal _ _stdcall EventHandler (args){特価;//handle イベントの適切な起動}(&N)
どこ retVal イベント ハンドラーの戻り値 EventHandler 関数ハンドラーの名前を指定し、 args 、イベントの引数のオプションの一覧です。この名前が、イベント ハンドラー、複合コントロールのイベント シンク マップの宣言の 1 つと一致する必要があります。
コード例を次に示しますでは、イベント ハンドラー (Click イベント) によって識別されるに含まれるコントロールを定義しますIDC_CIRCCTRL1:
void _ _stdcall (OnClick_CircCtrl1){特価;メッセージ ボックス (「発射される Click イベント !」、「CircCtl1」、MB_OK);}(&N)
マップ、複合コントロールのイベント ハンドラーの残りのエントリをイベント シンクを追加します。
複合コントロールが完全にアクティブになる前に、各含まれているコントロールは、そのイベントを処理しているイベントのディスパッチ インターフェイスなどのアウトゴーイング インターフェイスを照会します。すべてのインターフェイスが見つかった場合は、接続が確立されているし、するアウトゴーイング インターフェイスへの参照、コントロールからのイベントを処理するために使用されます。このプロシージャを"コントロールのアドバイスとして「と、複合コントロールの初期化時に、イベント シンク マップを使用して、複合コントロール オブジェクトによって自動的に行われます。
ユーザー ダイアログ ボックスを閉じると、アウトゴーイング インターフェイスに含まれているコントロールからすべてのストアド参照はクリーンアップされます。これを「コントロール アドバイズ中止」とも複合コントロールによって自動的に行われます。