方法 : ダイアログ ボックスにユーザー コントロールおよびホストを作成する
更新 : 2007 年 11 月
このトピックの処理手順では、ダイアログ ベースの新しい (CDialog クラス) MFC プロジェクトの作成を想定していますが、既存の MFC ダイアログに Windows フォーム コントロールのサポートを追加することもできます。
.NET ユーザー コントロールを作成するには
WindowsControlLibrary1 という名前の新しい Visual C# Windows コントロール ライブラリ プロジェクトを作成します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[Visual C#] フォルダの [Windows コントロール ライブラリ] アイコンをクリックします。
[OK] をクリックして、WindowsControlLibrary1 という既定のプロジェクト名をそのまま使用します。
.NET コントロールの既定の名前は UserControl1 です。
UserControl1 に子コントロールを追加します。
[ツールボックス] の [すべての Windows フォーム] の一覧を開きます。Button コントロールを UserControl1 のデザイン サーフェイスにドラッグします。
また、TextBox コントロールも追加します。
UserControl1.Designer.cs ファイルで、TextBox および Button の宣言をプライベートからパブリックに変更します。
プロジェクトをビルドします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
生成された DLL のファイル名と完全パスをビルド ログに記録しておくと、MFC アプリケーションにこの情報を入力するときに便利です。
MFC ホスト アプリケーションを作成するには
新しい MFC アプリケーション プロジェクトを作成します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[Visual C++] フォルダの [MFC アプリケーション] アイコンをクリックします。
[プロジェクト名] ボックスに「MFC01」と入力します。ソリューションの設定を [ソリューションに追加] に変更します。[OK] をクリックします。MFC アプリケーション ウィザードが表示されます。
MFC アプリケーション ウィザードで、[アプリケーションの種類] を選択します。[ダイアログ ベース] を選択します。他の設定の既定値を受け入れ、[完了] をクリックします。これで、MFC ダイアログを含む MFC アプリケーションが作成されました。
MFC ダイアログ ボックスに Placeholder コントロールを追加します。
[リソース ビュー] タブをクリックします。[リソース ビュー] で、IDD_MFC01_DIALOG をダブルクリックします。リソース エディタにダイアログ リソースが表示されます。
[ツールボックス] の [ダイアログ エディタ] の一覧を開きます。Static Text コントロールをダイアログ リソースにドラッグします。Static Text コントロールは、.NET Windows フォーム コントロールのプレースホルダとして機能します。コントロールのサイズが Windows フォーム コントロールとほぼ同じサイズになるように調整します。
プロパティ ウィンドウで Static Text コントロールの ID を IDC_CTRL1 に変更し、TabStop プロパティを True に変更します。
プロジェクトを構成します。
ソリューション エクスプローラで、MFC01 プロジェクトのノードを右クリックし、コンテキスト メニューの [プロパティ] を選択します。[プロパティ ページ] ダイアログ ボックスが表示されます。
[プロパティ ページ] ダイアログ ボックスの [構成プロパティ] ツリー コントロールの [全般] を選択し、次に [プロジェクトの既定値] ボックスの [共通言語ランタイム サポート] を [共通言語ランタイム サポート (/clr)] に設定します。[OK] をクリックします。
.NET コントロールへの参照を追加します。
ソリューション エクスプローラで、MFC01 プロジェクトのノードを右クリックし、[参照設定] をクリックします。[プロパティ ページ] の [新しい参照の追加] をクリックし、WindowsControlLibrary1 ([プロジェクト] タブ) を選択して [OK] をクリックします。これによって、プログラムをコンパイルするために、参照が /FU コンパイラ オプションの形式で追加されます。また、プログラムを実行するために、WindowsControlLibrary1.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<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); }
プロジェクトをビルドして実行します。
ソリューション エクスプローラで、MFC01 を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。MFC ダイアログ ボックスに Windows フォーム コントロールが表示されます。