Views Foundation > 既存の Rogue Wave Views コードから ActiveX コントロールを作成する > MFC ライブラリーで ActiveX コントロールを作成する > 手順 2:MFC で ActiveX コントロールを作成する
 
手順 2:MFC で ActiveX コントロールを作成する
この手順では、手順 1:プログラムの準備 で定義した Ctrl クラスによって ActiveX コントロールを作成する方法について説明します。この手順の終了時に得られる ActiveX コントロールには、最小限度のインターフェースしかありません。
次の処理を行います。
*新規プロジェクトの作成
*プロジェクトにファイルを追加する
*ウィザードで生成されたファイルを変更する
*CDemoMFCCtrl にプライベート・メンバー変数を追加する
*CDemoMFCCtrl クラスに新しい Windows メッセージ・ハンドラーを追加する
*DemoMFC.rc ファイルの変更
*プロジェクト設定を変更する
*これでActiveX コントロールを構築してテストできます。
新規プロジェクトの作成
1. Visual C++ では、「ファイル」メニューで「新規作成」 > 「プロジェクト」の順に選択し、「MFC ActiveX コントロール」を選択して新規プロジェクトを作成します。
2. 「プロジェクト名」テキスト・フィールドに DemoMFC と入力し、他のオプションはそのままにします。
3. 「OK」をクリックします。
MFC ActiveX コントロール・ウィザードが表示されます。
4. 「コントロールの設定」タブを開きます。
5. オプション「表示時にアクティブ」および「[オブジェクトの挿入] で使用」をチェックします。
[バージョン情報] ボックス ダイアログあり」もチェックできますが、これはオプションです。
他のプロパティーはチェックなしのままにします。ウィンドウが、コントロールのサブクラスになっていないことを確認します。 「ウィンドウなしでアクティブ」がチェックされていないことも確認します。
6. 「完了」をクリックします。
プロジェクトにファイルを追加する
1. ファイル ctrl.cpp をプロジェクトに追加します。
2. DemoCtrl.h ファイルを作成して、プロジェクトに追加します。
このファイルには、それに続く DemoCtrl クラスの宣言を含む必要があります。このクラスがコントロールを初期化します。また、ウィザードによって生成されたコードと、Rogue Wave Views コードおよび/または Ctrl クラス間のインターフェースを提供します。
class DemoCtrl :public Ctrl
{
public:
DemoCtrl(HWND parent);
~DemoCtrl();
static IlvDisplay* getDisplay()throw() { return _Display; }
static bool InitDisplay(HINSTANCE hInstance) throw();
static void CleanDisplay();
 
private:
DemoCtrl(const DemoCtrl&); // Not defined to avoid
// default copy constructor.
static IlvDisplay* _display;
};
3. DemoCtrl.cpp ファイルを作成して、プロジェクトに追加します。
このファイルはインラインで宣言されていない DemoCtrl クラスのメンバー関数と、スタティック・クラス変数 _Display を定義します。
*コンストラクター DemoCtrl(HWND parent) は、対応する Ctrl クラスのコンストラクターを呼び出します。
DemoCtrl::DemoCtrl(HWND hWnd)
: Ctrl(_Display, reinterpret_cast<IlvSystemView>(hWnd))
{
}
*スタティック・メンバー関数 InitDisplay は、IlvDisplay のインスタンスを作成して、_Display に格納します。
bool
DemoCtrl::InitDisplay(HINSTANCE hInstance) throw ()
{
try {
_Display = new IlvDisplay(hInstance, "MFC Views Sample");
if (!_Display || _Display->isBad()) {
IlvFatalError("Can't initialize IlvDisplay.");
if (_Display) {
delete _Display;
_Display = 0;
}
}
}
catch(...) {
CleanDisplay();
}
return _Display ? true :false;
}
*スタティック関数 CleanDisplay は、_Display に格納された IlvDisplay のインスタンスを解放します。
void
DemoCtrl::CleanDisplay()
{
if (_Display) {
delete _Display;
_Display = 0;
}
}
ウィザードで生成されたファイルを変更する
ウィザードで生成された DemoMFC.cpp ファイルを変更して、IlvDisplay クラスのインスタンスを作成してから、削除します。DemoCtrl クラスのスタティック・メンバー関数を、次の手順で使用します。
1. ヘッダー・ファイル DemoCtrl.h をインクルードします。
2. CDemoMFCApp::InitInstance メンバー関数内で、 次のコード行を bInit テストに追加します。
bInit = DemoCtrl::InitDisplay(AfxGetInstanceHandle());
3. CDemoMFCApp::ExitInstance メンバー関数の最初に、次のコード行を追加します。
DemoCtrl::CleanDisplay();
CDemoMFCCtrl にプライベート・メンバー変数を追加する
1. DemoMFC クラスを展開して、CDemoMFCCtrl を選択します。
2. マウスの右ボタンを押して、「追加」 > 「変数の追加」と選択します。
3. 「変数の種類」入力フィールドに、DemoCtrl* とタイプします。
4. 「変数名」フィールドに m_Ctrl と入力し、「OK」をクリックします。
5. DemoCtrl.hDemoMFCCtrl.h にインクルードします。
CDemoMFCCtrl クラスに新しい Windows メッセージ・ハンドラーを追加する
1. DemoMFCCtrl.hBEGIN_MSG_MAP 宣言まで移動します。
2. BEGIN_MSG_MAP 宣言で、次のコードを追加します。
//{{AFX_MSG_MAP(CDemoMFCCtrl)
ON_WM_CREATE()
//}}AFX_MSG_MAP
3. DemoMFCCtrl.hDECLARE_MESSAGE_MAP() まで移動します。
4. 次のコードを先頭に追加します。
//{{AFX_MSG(CDemoMFCCtrl)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
5. DemoMFCCtrl.cpp を開き、OnCreate メソッド実装を追加します。
int CDemoMFCCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
// Added for Rogue Wave.
try {
m_Ctrl = new DemoCtrl(m_hWnd);
} catch (...) {
if (m_Ctrl) {
delete m_Ctrl;
m_Ctrl = 0;
}
}
// End Added for Views.
return 0;
}
DemoMFC.rc ファイルの変更
次の行を、ファイル DemoMFC.rc の最後に追加します。
#include "viewsdata.rc"
プロジェクト設定を変更する
1. プロジェクト プロパティ ページを開きます。
2. 「プロジェクトの設定」ダイアログ・ボックスで、「Debug」を選択して、「C/C++」タブをクリックします。
3. 「カテゴリ」ドロップダウン・リストで「全般」、または「プリプロセッサ」オプションを選択し、プリプロセッサの定義 _DEBUGNDEBUG に変更します。
4. 「すべての構成」を選択して、「全般」タブをクリックします。
5. 「Microsoft Foundation Classes」ドロップダウン・リストから「MFC のスタティック ライブラリを使用」を選択します。
6. 「C++」タブを有効にして、「カテゴリ」ドロップダウン・リストで「全般」、または「プリプロセッサ」オプションを選択し、「プリプロセッサ定義」テキスト・フィールドに ILVSTD を追加します。
7. 「C/C++」カテゴリーで「コード生成」を選択し、「C++ の例外を有効にする」で「はい (/EHSC) 」を、「ランタイム ライブラリー」で「マルチスレッド (/MT)」を選択します。
8. C/C++」カテゴリーのドロップダウン・リストの「ランタイム タイプ情報 (RTTI) を有効にする」で「åæåÍ」を選択します。
9. 「C/C++」カテゴリーで「全般」を選択し、「インクルード ファイルのパス」テキスト・フィールドに次の行を入力します。
".;c:\Rogue Wave\views\include"
ここでは、Rogue Wave Views が C:\Rogue Wave\views\ にインストールされていることを前提にしています。
10. 「カテゴリー」ドロップダウン・リストの「プリコンパイル済みヘッダー」を選んでから、 ファイル ctrl.cpp および DemoCtrl.cpp について「プリコンパイル済みヘッダーを使用しない」オプションを選択します。
Rogue Wave Views の初期化メカニズムのため、ほとんどの Rogue Wave Views ヘッダーはプリコンパイルできません。
11. 「リンカ」カテゴリーのカテゴリーで「全般」を選択し、「追加ライブラリ パス」テキスト・フィールドに Rogue Wave Views stat_mta ライブラリーへのパスを次のように追加します。
Ex: c:\Rogue Wave\views\lib\x86_.net2010_10.0\stat_mta
12. 「リンカ」カテゴリーで「入力」を選択してから、Rogue Wave Views ライブラリー (すなわち winviews.libviews.libilvgadgt.lib) および、wsock32.libimm32.lib ライブラリーをàÀë¹ä÷åWに追加します。
これでActiveX コントロールを構築してテストできます。
html テスト・ファイルを、下記のように作成します。
<HTML>
<HEAD>
<TITLE>Test page for object DemoMFCCtrl</TITLE>
</HEAD>
 
<BODY>
 
<OBJECT WIDTH=400 HEIGHT=400 ID="DemoMFCCtrl"CLASSID="CLSID:3D31E7B8-400B-11D3-B74F-00C04F68A89D"></OBJECT>
 
</BODY>
 
</HTML>
メモ: クラス ID が生成されるので、ご使用ファイルのクラス ID がこの例とは異なる場合があります。

Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.