方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する
この記事の手順では、ダイアログ ベースの (CDialog Class) MFC (Microsoft Foundation Classes) プロジェクトの作成を想定していますが、既存の MFC ダイアログ ボックスに Windows フォーム コントロールのサポートを追加することもできます。
.NET ユーザー コントロールを作成するには
WindowsFormsControlLibrary1
という名前の Visual C# Windows フォーム コントロール ライブラリ プロジェクトを作成します。[ファイル] メニューの [新規作成] をクリックし、 [プロジェクト] をクリックします。 Visual C# フォルダーの [Windows フォーム コントロール ライブラリ] を選択します。
[OK] をクリックして、プロジェクト名
WindowsFormsControlLibrary1
を受け入れます。既定では、.NET コントロールの名前は
UserControl1
です。UserControl1
に子コントロールを追加します。ツールボックスの [すべての Windows フォーム] の一覧を開きます。 Button コントロールを
UserControl1
のデザイン サーフェイスにドラッグします。また、TextBox コントロールも追加します。
ソリューション エクスプローラーで UserControl1.Designer.cs をダブルクリックして開き、編集します。 TextBox および Button の説明を
private
からpublic
に変更します。プロジェクトをビルドします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
MFC ホスト アプリケーションを作成するには
MFC アプリケーション プロジェクトを作成します。
[ファイル] メニューの [新規作成] をクリックし、 [プロジェクト] をクリックします。 [Visual C++] フォルダーで、[MFC アプリケーション] を選択します。
[名前] ボックスに「
MFC01
」と入力します。 ソリューションの設定を [ソリューションに追加] に変更します。 OK をクリックします。MFC アプリケーション ウィザードで、[アプリケーションの種類] として [ダイアログ ベース] を選択します。 残りの既定の設定を受け入れて、[完了] をクリックします。 これにより、MFC ダイアログ ボックスを伴った MFC アプリケーションが作成されます。
MFC ダイアログ ボックスに Placeholder コントロールを追加します。
[表示] メニューの [リソース ビュー] をクリックします。 [リソース ビュー] で Dialog フォルダーを展開し、
IDD_MFC01_DIALOG
をダブルクリックします。 リソース エディターにダイアログ リソースが表示されます。ツールボックスの [ダイアログ エディター] の一覧を開きます。 Static Text コントロールをダイアログ リソースにドラッグします。 Static Text コントロールは、.NET Windows フォーム コントロールのプレースホルダーとして機能します。 コントロールのサイズが Windows フォーム コントロールとほぼ同じサイズになるように調整します。
[プロパティ] ウィンドウで Static Text コントロールの ID を
IDC_CTRL1
に変更し、TabStop プロパティを True に変更します。共通言語ランタイム (CLR: Common Language Runtime) に対するサポートをプロジェクトに構成します。
ソリューション エクスプローラーで [MFC01] プロジェクト ノードを右クリックし、[プロパティ] をクリックします。
[プロパティ ページ] ダイアログ ボックスで、[構成プロパティ] の下の [全般] を選択します。 [プロジェクトの既定値] セクションの [共通言語ランタイム サポート] を [共通言語ランタイム サポート (/clr)] に設定します。
[構成プロパティ] の下で、[C/C++] を展開し、[全般] ノードを選択します。 [デバッグ情報の形式] を [プログラム データベース (/Zi)] に設定します。
[コード生成] ノードを選択します。 [最小リビルドを有効にする] を [いいえ (/Gm-)] に設定します。 また、[基本ランタイム チェック] も [既定値] に設定します。
[OK] をクリックして変更を適用します。
.NET コントロールへの参照を追加します。
ソリューション エクスプローラーで [MFC01] プロジェクト ノードを右クリックし、[追加]、[参照] の順にクリックします。 [プロパティ ページ] の [新しい参照の追加] をクリックし、WindowsFormsControlLibrary1 ([プロジェクト] タブの下) を選択して [OK] をクリックします。 これにより、プログラムをコンパイルするために、/FU コンパイラ オプションの形式で参照が追加されます。 また、プログラムを実行するために、WindowsFormsControlLibrary1.dll が \MFC01\ プロジェクト フォルダーにコピーされます。
Stdafx.h で次の行を見つけます。
#endif // _AFX_NO_AFXCMN_SUPPORT
その上に次の行を追加します。
#include <afxwinforms.h> // MFC Windows Forms support
マネージド コントロールを作成するためのコードを追加します。
最初に、マネージド コントロールを宣言します。 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); }
プロジェクトをビルドして実行します。
ソリューション エクスプローラーで、[MFC01] を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。 MFC ダイアログ ボックスに Windows フォーム コントロールが表示されます。