方法: ユーザー コントロールを作成し、MDI ビューをホストする
次の手順では、.NET Framework ユーザー コントロールを作成し、そのユーザー コントロールをコントロール クラス ライブラリ (特に Windows コントロール ライブラリ プロジェクト) に作成し、プロジェクトをアセンブリにコンパイルする方法について説明します。 このコントロールは、CView クラスおよび CWinFormsView クラスから派生したクラスを使用する MFC アプリケーションで使用できます。
Windows フォーム ユーザー コントロールの作成方法およびコントロール クラス ライブラリの作成方法については、「方法: 複合コントロールを作成する」を参照してください。
Note
サードパーティのグリッド コントロールなどの 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] をクリックして変更を適用します。
pch.h (Visual Studio 2017 以前の場合は 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 を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。