Views Foundation > 既存の Rogue Wave Views コードから ActiveX コントロールを作成する > ATL ライブラリーで ActiveX コントロールを作成する > 手順 2:ATL で ActiveX コントロールを作成する
 
手順 2:ATL で ActiveX コントロールを作成する
この手順では、手順 1:プログラムの準備 で定義した Ctrl クラスによって ActiveX コントロールを作成する方法について説明します。この手順の終了時に得られる ActiveX コントロールには、最小限度のインターフェースしかありません。
次の処理を行います。
*新規プロジェクトの作成
*新規 ATL オブジェクトの追加
*プロジェクトにファイルを追加する
*DllMain 関数に表示の初期化と破壊を追加する
*CDemoATLCtrl にプライベート・メンバー変数を追加する
*CDemoATLCtrl クラスに新しい Windows メッセージ・ハンドラーを追加する
*ウィザードで生成された DemoATLCtrl.h ファイルを変更する
*DemoATL.rc ファイルの変更
*プロジェクト設定を変更する
*ActiveX コントロールの構築
新規プロジェクトの作成
1. Visual C++ では、「ファイル」メニューで「新規作成」 > 「プロジェクト」の順に選択し、「ALT プロジェクト」テンプレート」を選択して新規プロジェクトを作成します。
2. 「プロジェクト名」テキスト・フィールドにDemoATL と入力し、「OK」をクリックします。
ALT プロジェクト・ウィザードが表示されます。
3. 「ダイナミック リンク ライブラリ (DLL)」オプションを選択し、「プロキシ/スタブ コードをマージ」、「MFC サポート」、「MTS のサポート」はチェックなしのままにします。
メモ: これらのオプションは、このチュートリアルでは不要です。ただし、最後に取得するものによっては、後で選択が必要になる場合もあります。
4. 「完了」と「OK」をクリックします。
新規 ATL オブジェクトの追加
1. 「プロジェクト ワークスペース」ウィンドウの「クラス ビュー」タブを、必要ならばクリックして有効にし、DemoATL クラスのラベルをマウスの右ボタンでクリックします。
2. 表示されるメニューから「追加」 > 「クラス」の順に選択します。 ダイアログ・ボックスで「ALT コントロール」を選択します。
ATL コントロール ウィザードが表示されます。
3. 「短い名前」テキスト・フィールドに DemoATLCtrl と入力します。
他のフィールドには自動的にラベルが入るので、そのままにしておきます。
4. 「オプション」タブをクリックして、「スレッド モデル」で「アパートメント」、「インターフェイス」で「デュアル」、「アグリゲーション」で「はい」を選択します。「サポート」で「接続ポイント」オプションもチェックします。
5. 「表示」タブをクリックして、「不透明」、「背景を塗りつぶす」、「標準化された DC」、「挿入可能」、「常にウィンドウ付き」と選択します。
他のオプションはチェックなしのままにします。ストック プロパティの宣言は行いません。
メモ: 選択されたオプションは、最終的に取得したいものによって異なる場合があります。
プロジェクトにファイルを追加する
1. ファイル ctrl.cpp および ctrl.h を、プロジェクトに追加します。
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.
DemoCtrl(); // Not defined to avoid default 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, "ATL 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;
}
}
DllMain 関数に表示の初期化と破壊を追加する
DemoCtrl クラスのスタティック・メンバー関数を、次の手順で使用します。
1. DllMain 関数を検索し、次のコードを実装に追加します。
switch (dwReason) {
case DLL_PROCESS_ATTACH:
if (!DemoCtrl::InitDisplay(hInstance))
return FALSE;
break;
case DLL_PROCESS_DETACH:
DemoCtrl::CleanDisplay();
break;
default:
break;
}
2. ヘッダー・ファイル DemoCtrl.h をインクルードします。
CDemoATLCtrl にプライベート・メンバー変数を追加する
1. DemoATL クラスを展開して、 CDemoATLCtrl を選択します。
2. マウスの右ボタンを押して、「追加」 > 「変数の追加」と選択します。
3. 「変数の種類」入力フィールドに、DemoCtrl* とタイプします。
4. 「変数名」フィールドに m_Ctrl と入力してから、「OK」をクリックします。
CDemoATLCtrl クラスに新しい Windows メッセージ・ハンドラーを追加する
1. CDemoATLCtrl コンストラクター (ファイル DemoATLCtrl.h) で、次の行を追加してコントロール・ウィンドウが表示されるようにします。
m_bWindowOnly = TRUE;
2. DemoATLCtrl.hBEGIN_MSG_MAP 宣言を検索します。
3. BEGIN_MSG_MAP 宣言で、次のコードを追加します。
MESSAGE_HANDLER(WM_CREATE, OnCreate)
4. 次のパブリック関数をCDemoATLCtrl クラス (ファイル DemoATLCtrl.h)に追加します。
LRESULT OnCreate (UINT uMsg, WPARAM wParam, LPARAM
lParam, BOOL& bHandled) {
try {
m_Ctrl = new DemoCtrl(m_hWnd);
} catch (...) {
if (m_Ctrl) {
delete m_Ctrl;
m_Ctrl = 0;
}
}
return 0;
}
ウィザードで生成された DemoATLCtrl.h ファイルを変更する
ウィザードで生成されたファイル DemoATLCtrl.h を変更して、アプリケーションで使用する DemoCtrl クラスのインスタンスを、次の手順で作成します。
1. ファイル DemoATLCtrl.h に、ヘッダー・ファイル DemoCtrl.h をインクルードします。
2. コンストラクター (ファイル DemoATLCtrl.h) 内の変数 m_Ctrl0 に初期化します。
CDemoATLCtrl()
// Added for Rogue Wave Views.
: m_Ctrl(0)
// End Added for Rogue Wave Views.
{
m_bWindowOnly = TRUE;
}
DemoATL.rc ファイルの変更
次の行を、ファイル DemoATL.rc の最後に追加します。
#include "viewsdata.rc"
プロジェクト設定を変更する
1. プロジェクト プロパティ ページを開きます。
2. 「プロジェクトの設定」ダイアログ・ボックスで、「デバッグの設定」を選択して、「C/C++」タブをクリックします。
3. 「カテゴリ」ドロップダウン・リストで「全般」、または「プリプロセッサ」オプションを選択し、プリプロセッサの定義 _DEBUGNDEBUG に変更します。
4. 必要ならば、「すべての構成」を選択して「C/C++」タブをクリックします。
5. 「カテゴリ」ドロップダウン・リストで「全般」、または「プリプロセッサ」オプションを選択し、「プリプロセッサ定義」テキスト・フィールドに ILVSTD を追加します。
6. 「C/C++」カテゴリーで「コード生成」を選択し、「C++ の例外を有効にする」で「はい (/EHSC) 」を、「ランタイム・ライブラリー」で「マルチスレッド
(/MT)
」を選択します。
7. 「C/C++」カテゴリーのドロップダウン・リストの「ランタイム タイプ情報 (RTTI) を有効にする」で「言語」を選択します。
8. 「C/C++」カテゴリーで「全般」を選択し、「インクルード ファイルのパス」テキスト・フィールドに次の行を入力します。
".;c:\Rogue Wave\views\include"
ここでは、Rogue Wave Views が C:\Rogue Wave\views\ にインストールされていることを前提にしています。
9. 「カテゴリー」ドロップダウン・リストの「プリコンパイル済みヘッダー」を選んでから、 ファイル ctrl.cpp および DemoCtrl.cpp について「プリコンパイル済みヘッダーを使用しない」オプションを選択します。
Rogue Wave Views の初期化メカニズムのため、ほとんどの Rogue Wave Views ヘッダーはプリコンパイルできません。
10. 「リンカ」カテゴリーで「全般」を選択し、「追加ライブラリ パス」テキスト・フィールドに Rogue Wave Views stat_mta ライブラリーへのパスを次のように追加します。
Ex: c:\Rogue Wave\views\lib\x86_.net2010_10.0\stat_mta
11. Linker カテゴリーで Input を選択し、Rogue Wave Views ライブラリー (winviews.libviews.lib、および ilvgadgt.lib) と wsock32.lib および imm32.lib ライブラリーを依存関係に追加します。
12. すべてのリリース設定を選択してから、「プリプロセッサ定義」テキスト・フィールドから、_ATL_MIN_CRT を削除します。
標準 C++ ランタイム・ライブラリーを使用するため、このオプションは削除する必要があります。 ただし、このオプションは Microsoft Visual Studio 2008 (9.0) 以降使用されなくなったため、生成された ATL プロジェクトには含まれていないことがあります。
ActiveX コントロールの構築
これでActiveX コントロールを構築してテストできます。ウィザードは、html ファイル DemoATLCtrl.htm を生成します。これを使ってActiveX コントロールが、Internet Explorer にロードできます。
このActiveX コントロールはデフォルト・サイズが小さいため、その幅と高さを次のように変更できます。
<OBJECT WIDTH=400 HEIGHT=400 ID="DemoATLCtrl" CLASSID="CLSID:3B10417D-3E6C-
11D3-B74F-00C04F68A89D"></OBJECT>
メモ: クラス ID が生成されるので、ご使用ファイルのクラス ID がこの例とは異なる場合があります。

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