方法: ネイティブ C++ クラスから Windows フォーム イベントをシンクする

MFC マクロ マップ形式を使って、ネイティブ C++ クラスが、Windows フォーム コントロールまたは他のフォームから発生したマネージド イベントからコールバックを受け取れるようにすることができます。 ビューとダイアログのイベントをシンクする処理は、コントロールに対して同じタスクを実行する場合と似ています。

そのためには、次の手順を実行する必要があります。

このサンプルは、「方法: Windows フォームで DDX/DDV データ バインドを実行する」で行った作業の続きです。

次に、マネージド Click イベントのために、MFC コントロール (m_MyControl) を OnClick というマネージド イベント ハンドラーのデリゲートに関連付けます。

OnClick イベント ハンドラーをアタッチするには:

  1. BOOL CMFC01Dlg::OnInitDialog の実装に、次のコードを追加します。

    m_MyControl.GetControl()->button1->Click += MAKE_DELEGATE( System::EventHandler, OnClick );
    
  2. クラス 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 );
    
  3. 最後に、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