次の方法で共有


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

更新 : 2007 年 11 月

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

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

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

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

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

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

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

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

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

  3. UserControl1.Designer.cs ファイルで、TextBox および Button の宣言をプライベートからパブリックに変更します。

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

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

    生成された DLL のファイル名と完全パスをビルド ログに記録しておくと、MFC アプリケーションにこの情報を入力するときに便利です。

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

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

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

    [プロジェクト名] ボックスに「MFC01」と入力します。ソリューションの設定を [ソリューションに追加] に変更します。[OK] をクリックします。MFC アプリケーション ウィザードが表示されます。

    MFC アプリケーション ウィザードで、[アプリケーションの種類] を選択します。[ダイアログ ベース] を選択します。他の設定の既定値を受け入れ、[完了] をクリックします。これで、MFC ダイアログを含む MFC アプリケーションが作成されました。

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

    [リソース ビュー] タブをクリックします。[リソース ビュー] で、IDD_MFC01_DIALOG をダブルクリックします。リソース エディタにダイアログ リソースが表示されます。

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

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

  3. プロジェクトを構成します。

    ソリューション エクスプローラで、MFC01 プロジェクトのノードを右クリックし、コンテキスト メニューの [プロパティ] を選択します。[プロパティ ページ] ダイアログ ボックスが表示されます。

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

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

    ソリューション エクスプローラで、MFC01 プロジェクトのノードを右クリックし、[参照設定] をクリックします。[プロパティ ページ] の [新しい参照の追加] をクリックし、WindowsControlLibrary1 ([プロジェクト] タブ) を選択して [OK] をクリックします。これによって、プログラムをコンパイルするために、参照が /FU コンパイラ オプションの形式で追加されます。また、プログラムを実行するために、WindowsControlLibrary1.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<WindowsControlLibrary1::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 フォーム ユーザー コントロールのホスト