方法 : ユーザー コントロールを作成し、MDI ビューをホストする
更新 : 2007 年 11 月
次の手順では、.NET Framework ユーザー コントロールを作成し、そのユーザー コントロールをコントロール クラス ライブラリ (特に Windows コントロール ライブラリ プロジェクト) に作成し、プロジェクトをアセンブリにコンパイルする方法について説明します。このコントロールは、CView クラス および CWinFormsView クラス から派生したクラスを使用する MFC アプリケーションから使用できます。
Windows フォーム ユーザー コントロールの作成方法およびコントロール クラス ライブラリの作成方法については、「方法 : 複合コントロールを作成する」を参照してください。
メモ : |
---|
サードパーティのグリッド コントロールなどの WinForm コントロールを MFC アプリケーションでホストすると、場合によっては適切に動作しないことがあります。この問題の推奨回避策は、Windows フォーム ユーザー コントロールを MFC アプリケーションに配置し、サードパーティのグリッド コントロールをユーザー コントロールの内部に配置することです。 |
「方法 : ダイアログ ボックスにユーザー コントロールおよびホストを作成する」での手順の場合と同様に、この手順では、WindowsControlLibrary1 という名前の Windows フォーム コントロール ライブラリ プロジェクトを作成済みであることを前提とします。
MFC ホスト アプリケーションを作成するには
新しい MFC アプリケーション プロジェクトを作成します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックしますNew。[Visual C++] フォルダの [MFC アプリケーション] をクリックします。
[プロジェクト名] ボックスに「MFC02」と入力し、ソリューションの設定を [ソリューションに追加] に変更します。[OK] をクリックします。
MFC アプリケーション ウィザードで、すべての既定値をそのまま使用し、[完了] をクリックします。これにより、マルチ ドキュメント インターフェイスを持つ MFC アプリケーションが作成されます。
プロジェクトを構成します。
ソリューション エクスプローラで、MFC02 プロジェクトのノードを右クリックし、コンテキスト メニューの [プロパティ] を選択します。[プロパティ ページ] ダイアログ ボックスが表示されます。
[プロパティ ページ] ダイアログ ボックスの [構成プロパティ] ツリー コントロールの [全般] を選択し、次に [プロジェクトの既定値] ボックスの [共通言語ランタイム サポート] を [共通言語ランタイム サポート (/clr)] に設定します。[OK] をクリックします。
.NET コントロールへの参照を追加します。
ソリューション エクスプローラで、MFC02 プロジェクトのノードを右クリックし、[参照設定] ノードを選択します。[プロパティ ページ] の [新しい参照の追加] をクリックし、WindowsControlLibrary1 ([プロジェクト] タブ) を選択して [OK] をクリックします。これによって、プログラムをコンパイルするために、参照が /FU コンパイラ オプションの形式で追加されます。また、プログラムを実行するために、WindowsControlLibrary1.dll が MFC02 プロジェクト ディレクトリにコピーされます。
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(WindowsControlLibrary1::UserControl1::typeid) { } BEGIN_MESSAGE_MAP(CMFC02View, CWinFormsView) //leave existing body as is END_MESSAGE_MAP()
プロジェクトをビルドして実行します。
ソリューション エクスプローラで、MFC02 を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[デバッグ] メニューの [デバッグなしで開始] をクリックします。