次の方法で共有


方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する

このトピックの手順では、ダイアログ ベースの (CDialog クラス) MFC (Microsoft Foundation Class) プロジェクトの作成を想定していますが、既存の MFC ダイアログ ボックスに Windows フォーム コントロールのサポートを追加することもできます。

.NET ユーザー コントロールを作成するには

  1. WindowsFormsControlLibrary1 という名前の新しい Visual C# Windows フォーム コントロール ライブラリ プロジェクトを作成します。

    [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。Visual C# フォルダーの [Windows フォーム コントロール ライブラリ] をクリックします。

    [OK] をクリックして、WindowsFormsControlLibrary1 という既定のプロジェクト名をそのまま使用します。

    既定では、.NET コントロールの名前は UserControl1 です。

  2. UserControl1 に子コントロールを追加します。

    ツールボックス[すべての Windows フォーム] の一覧を開きます。Button コントロールを UserControl1 のデザイン サーフェイスにドラッグします。

    また、TextBox コントロールも追加します。

  3. ソリューション エクスプローラーUserControl1.Designer.cs をダブルクリックして開き、編集しますTextBox および Button の説明を private から public に変更します。

  4. プロジェクトをビルドします。

    [ビルド] メニューの [ソリューションのビルド] をクリックします。

MFC ホスト アプリケーションを作成するには

  1. MFC アプリケーション プロジェクトを作成します。

    [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[Visual C++] フォルダーの [MFC アプリケーション] をクリックします。

    [名前] ボックスに「MFC01」と入力します。ソリューションの設定を [ソリューションに追加] に変更します。[OK] をクリックします。

    MFC アプリケーション ウィザードで、[アプリケーションの種類] として [ダイアログ ベース] を選択します。残りの既定の設定を受け入れて、[完了] をクリックします。これにより、MFC ダイアログ ボックスを伴った MFC アプリケーションが作成されます。

  2. MFC ダイアログ ボックスに Placeholder コントロールを追加します。

    [表示] メニューの [リソース ビュー] をクリックします。[リソース ビュー]Dialog フォルダーを展開し、IDD_MFC01_DIALOG をダブルクリックします。リソース エディターにダイアログ リソースが表示されます。

    ツールボックス[ダイアログ エディター] の一覧を開きます。Static Text コントロールをダイアログ リソースにドラッグします。Static Text コントロールは、.NET Windows フォーム コントロールのプレースホルダーとして機能します。コントロールのサイズが Windows フォーム コントロールとほぼ同じサイズになるように調整します。

    [プロパティ] ウィンドウで Static Text コントロールの ID を IDC_CTRL1 に変更し、TabStop プロパティを True に変更します。

  3. 共通言語ランタイム (CLR: Common Language Runtime) に対するサポートをプロジェクトに構成します。

    ソリューション エクスプローラーで [MFC01] プロジェクト ノードを右クリックし、[プロパティ] をクリックします。

    [プロパティ ページ] ダイアログ ボックスで、[構成プロパティ] の下の [全般] を選択します。[プロジェクトの既定値] セクションの [共通言語ランタイム サポート][共通言語ランタイム サポート (/clr)] に設定します。

    [構成プロパティ] の下で、[C/C++] を展開し、[全般] ノードを選択します。[デバッグ情報の形式][プログラム データベース (/Zi)] に設定します。

    [コード生成] ノードをクリックします。[簡易リビルドを行う][いいえ (/Gm-)] に設定します。また、[基本ランタイム チェック][既定値] に設定します。

    [OK] をクリックして変更を適用します。

  4. .NET コントロールへの参照を追加します。

    ソリューション エクスプローラーで [MFC01] プロジェクト ノードを右クリックし、[参照] をクリックします。[プロパティ ページ][新しい参照の追加] をクリックし、WindowsFormsControlLibrary1 ([プロジェクト] タブの下) をクリックして [OK] をクリックします。これにより、プログラムをコンパイルするために、/FU コンパイラ オプションの形式で参照が追加されます。また、プログラムを実行するために、WindowsFormsControlLibrary1.dll が \MFC01\ プロジェクト フォルダーにコピーされます。

  5. Stdafx.h で次の行を見つけます。

    #endif // _AFX_NO_AFXCMN_SUPPORT 
    

    その上に次の行を追加します。

    #include <afxwinforms.h>   // MFC Windows Forms support
    
  6. マネージ コントロールを作成するためのコードを追加します。

    最初に、マネージ コントロールを宣言します。MFC01Dlg.h でダイアログ クラスの宣言に移動し、Protected のスコープにユーザー コントロールのデータ メンバーを次のように追加します。

    class CMFC01Dlg : public CDialog
    {
       // ...
       // Data member for the .NET User Control:
       CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_ctrl1;
    

    次に、マネージ コントロールの実装を提供します。MFC01Dlg.cpp の、MFC アプリケーション ウィザードによって生成された CMFC01Dlg::DoDataExchange のダイアログ オーバーライド (同一ファイルの CAboutDlg::DoDataExchange ではなく) に次のコードを追加して、マネージ コントロールを作成し、静的なプレースホルダー IDC_CTRL1 に関連付けます。

    void CMFC01Dlg::DoDataExchange(CDataExchange* pDX)
    {
       CDialog::DoDataExchange(pDX);
       DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1);
    }
    
  7. プロジェクトをビルドして実行します。

    ソリューション エクスプローラーで、MFC01 を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。

    [ビルド] メニューの [ソリューションのビルド] をクリックします。

    [デバッグ] メニューの [デバッグなしで開始] をクリックします。MFC ダイアログ ボックスに Windows フォーム コントロールが表示されます。

参照

その他の技術情報

MFC ダイアログ ボックスにおける Windows フォーム ユーザー コントロールのホスト