方法: ユーザー コントロールを作成し、MDI ビューをホストする
次の手順では、.NET Framework ユーザー コントロールを作成し、そのユーザー コントロールをコントロール クラス ライブラリ (特に Windows コントロール ライブラリ プロジェクト) に作成し、プロジェクトをアセンブリにコンパイルする方法について説明します。このコントロールは、CView クラスおよび CWinFormsView クラスから派生したクラスを使用する MFC アプリケーションで使用できます。
Windows フォーム ユーザー コントロールの作成方法およびコントロール クラス ライブラリの作成方法については、「方法 : 複合コントロールを作成する」を参照してください。
[!メモ]
サードパーティのグリッド コントロールなどの Windows フォーム コントロールは、MFC アプリケーションでホストした場合に適切に動作しないことがあります。この問題の推奨回避策は、Windows フォーム ユーザー コントロールを MFC アプリケーションに配置し、サードパーティのグリッド コントロールをユーザー コントロールの内部に配置することです。
「方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する」での手順のように、この手順では、WindowsFormsControlLibrary1 という名前の Windows フォーム コントロール ライブラリ プロジェクトを作成済みであることを前提とします。
MFC ホスト アプリケーションを作成するには
MFC アプリケーション プロジェクトを作成します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[Visual C++] フォルダーの [MFC アプリケーション] をクリックします。
名前 ボックスで、 MFC02 を入力し、 ソリューションに追加に設定する ソリューション を変更します。OKをクリックします。
MFC アプリケーション ウィザードで、すべての既定値をそのまま使用し、[完了] をクリックします。これにより、マルチ ドキュメント インターフェイスを持つ MFC アプリケーションが作成されます。
共通言語ランタイム (CLR: Common Language Runtime) に対するサポートをプロジェクトに構成します。
ソリューション エクスプローラーで、MFC01 プロジェクトのノードを右クリックし、コンテキスト メニューの [プロパティ] を選択します。[プロパティ ページ] ダイアログ ボックスが表示されます。
[構成プロパティ] の [全般] を選択します。[プロジェクトの既定値] セクションの [共通言語ランタイム サポート] を [共通言語ランタイム サポート (/clr)] に設定します。
[構成プロパティ] で [C/C++] を展開し、[全般] ノードをクリックします。[デバッグ情報の形式] を [プログラム データベース (/Zi)] に設定します。
[コード生成] ノードをクリックします。[簡易リビルドを行う] を [いいえ (/Gm-)] に設定します。また、[基本ランタイム チェック] も [既定値] に設定します。
[OK] をクリックして変更を適用します。
stdafx.h に、次の行を追加します。
#using <System.Windows.Forms.dll>
.NET コントロールへの参照を追加します。
ソリューション エクスプローラーで、MFC02 プロジェクトのノードを右クリックし、[参照設定] ノードを選択します。[プロパティ ページ] の [新しい参照の追加] をクリックし、WindowsFormsControlLibrary1 ([プロジェクト] タブ) を選択し、[OK] をクリックします。これにより、参照が /FU コンパイラ オプションの形式で追加され、プログラムをコンパイルできるようになります。また、MFC02 のプロジェクト ディレクトリに WindowsFormsControlLibrary1.dll がコピーされ、プログラムを実行できるようになります。
stdafx.h で次の行を見つけます。
#endif // _AFX_NO_AFXCMN_SUPPORT
その上に次の行を追加します。
#include <afxwinforms.h> // MFC Windows Forms support
ビュー クラスを変更して、これを CWinFormsView から継承します。
MFC02View.h で、CView を CWinFormsView に置き換えて、次のようなコードにします。
class CMFC02View : public CWinFormsView { };
MDI アプリケーションにビューを追加する場合は、作成するビューごとに CWinApp::AddDocTemplate を呼び出す必要があります。
MFC02View.cpp ファイルを変更して、IMPLEMENT_DYNCREATE マクロとメッセージ マップで CView を CWinFormsView に変更し、既存の空のコンストラクターを次に示すコンストラクターに置き換えます。
IMPLEMENT_DYNCREATE(CMFC02View, CWinFormsView) CMFC02View::CMFC02View(): CWinFormsView(WindowsFormsControlLibrary1::UserControl1::typeid) { } BEGIN_MESSAGE_MAP(CMFC02View, CWinFormsView) //leave existing body as is END_MESSAGE_MAP()
プロジェクトをビルドして実行します。
ソリューション エクスプローラーで、MFC02 を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。