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