手順 1:プログラムの準備
このチュートリアルの出発点として使用する、サンプル・アプリケーションを準備する手順です。サンプルは最後に ActiveX コントロールに変換して、他のアプリケーション内で使用できます。この手順で必要な作業は基本的に、データをコードから分離して、トップ・ビュー (元のプログラムの場合) または親ウィンドウの一部となる子ビューとして、メインビューを作成できるようにすることです。
また、これらの変更によって、新しい機能を ActiveX コントロールに追加するのが簡単になります。変更されたファイルが、step1 ディレクトリーにあります。
次の処理を行います。
コードからデータを分離して、.ilv ファイルに配置する
.ilv ファイルに格納されたデータは、.cpp ファイルに格納された文字列としてのデータよりも変更しやすくなります。また、あらゆる依存性の問題が、Rogue Wave Views データ・ファイル・パッケージ化ツールの ilv2data によって解決できます。
結果は、step1\data\ctrl.ilv ファイルにあります。
アタッチメントを追加したため、メイン・ビューを一貫した方法でリサイズできます。また、オブジェクトに名前を付けたので、プログラムからより容易にアクセスできます。これらの機能強化はすべて、Rogue Wave Views Studio で行われました。
メモ: コードからのデータ分離は、このチュートリアルで不可欠というわけではありませんが、変更を容易にするためにお勧めします。 |
Ctrl クラスの初期化コードをカプセル化する
初期化コードは、ActiveX コントロールの作成と対話に使用する Ctrl クラスにカプセル化されています。
このクラスは、step1\ctrl.h ファイルで宣言し、step1\ctrl.cpp ファイルで定義します。この cpp ファイルには、コールバック関数も格納します。
Ctrl が基本クラスです。
IlvGadgetContainer から派生します。3 つのコンストラクターと 4 つのメンバー関数だけで構成され、そのうち 1 つはプライベートです。
最初のコンストラクターは、
Ctrl オブジェクトをファイルの元のバージョンと同様にトップ・ビューとして作成します。
step1\manager.cpp の main 関数で使用され、次の署名があります。
Ctrl(IlvDisplay* display, const IlvRect& size, const char* filename = 0)
2 番目のコンストラクターは、
Ctrl オブジェクトを子ビューとして作成します。次の署名があります。
Ctrl(IlvDisplay* display,
IlvSystemView parent,
const IlvRect& size,
const char* filename = 0)
3 番目のコンストラクターは、
Ctrl オブジェクトを既存のシステム・ビューで作成します。これは、ActiveX コントロールの作成に使用されます。次の署名があります。
Ctrl(IlvDisplay* display, IlvSystemView parent, const char* filename = 0)
パブリック・メンバー関数
getManagerRectangle、
getManagerView、
getManager は、コントロールにロードされる各オブジェクトへのアクセスを提供します。.プライベート・メンバー関数
init はコントロールを初期化するために呼び出されます。つまり、データ・ファイルを読み込んだり、コールバックをオブジェクトに関連付けたりします。メンバー関数
PopupManager 内にあったコードのほとんどが、このクラスに移動しています。
リソース・ファイル (.rc) を ilv2data で作成する
ilv2data を使って、ファイル step1\data\ctrl.ilv および step1\data\browse.ilv が含まれる .rc ファイルを作成します。このリソース・ファイルをサンプル・プログラムで使うこともできますが、このチュートリアルでは後で ActiveX コントロールを構築するために使用します。
ilv2data の詳細は、Rogue Wave Views アプリケーションのパッケージ化 を参照してください。
manager.cpp ファイルの変更
ファイル
step1\manager.cpp には、
IlvDisplay のインスタンスと、新しい
Ctrl クラスのインスタンスを作成する main 関数だけが含まれます。
int
main(int argc, char* argv[])
{
IlvDisplay* display = new IlvDisplay("IlvDemo", "", argc, argv);
if (!display || display->isBad()) {
if (display)
delete display;
IlvFatalError("Couldn't create display");
return 1;
}
Ctrl* ctrl = new Ctrl(display, IlvRect(0, 0, 400, 400));
IlvMainLoop();
return 0;
}
Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.