方法: ネイティブ C++ クラスから Windows フォーム イベントをシンクする
MFC マクロ マップ形式を使って、ネイティブ C++ クラスが、Windows フォーム コントロールまたは他のフォームから発生したマネージド イベントからコールバックを受け取れるようにすることができます。 ビューとダイアログのイベントをシンクする処理は、コントロールに対して同じタスクを実行する場合と似ています。
そのためには、次の手順を実行する必要があります。
MAKE_DELEGATE を使ってコントロールに
OnClick
イベント ハンドラーをアタッチします。BEGIN_DELEGATE_MAP、END_DELEGATE_MAP、EVENT_DELEGATE_ENTRY を使ってデリゲート マップを作成します。
このサンプルは、「方法: Windows フォームで DDX/DDV データ バインドを実行する」で行った作業の続きです。
次に、マネージド Click イベントのために、MFC コントロール (m_MyControl
) を OnClick
というマネージド イベント ハンドラーのデリゲートに関連付けます。
OnClick イベント ハンドラーをアタッチするには:
BOOL CMFC01Dlg::OnInitDialog の実装に、次のコードを追加します。
m_MyControl.GetControl()->button1->Click += MAKE_DELEGATE( System::EventHandler, OnClick );
クラス CMFC01Dlg: public CDialog の宣言の public セクションに、次のコードを追加します。
// delegate map BEGIN_DELEGATE_MAP( CMFC01Dlg ) EVENT_DELEGATE_ENTRY( OnClick, System::Object^, System::EventArgs^ ) END_DELEGATE_MAP() void OnClick( System::Object^ sender, System::EventArgs^ e );
最後に、CMFC01Dlg.cpp に
OnClick
の実装を追加します。void CMFC01Dlg::OnClick(System::Object^ sender, System::EventArgs^ e) { AfxMessageBox(_T("Button clicked")); }
関連項目
MAKE_DELEGATE
BEGIN_DELEGATE_MAP
END_DELEGATE_MAP
EVENT_DELEGATE_ENTRY