COM
ATLチュートリアルを噛み砕いてみる
(2009. 7. 17)
最低限のCOMプログラムを組んだのですが、さすがにこれでは何ともねぇ・・・という感じです。ここから発展を考えるわけですが、どうにも何してよいかわかりません。ATL(Active
Template Liblary)の書籍もまた買ってしまいました(実は2冊目。1冊目は遥か向こうの郷里北海道に・・・うぅ)。で、久しぶりに書籍を見るわけですが、やっぱり良くわからないんですね。なんだかCOM/ATLはさっぱりさっぱり。
仕方ないのでATLチュートリアルを噛み砕いてみる事にしました。チュートリアルの解説はMSDNにあります(http://msdn.microsoft.com/ja-jp/library/599w5e7x.aspx)。
○ 手順1:プロジェクトの作成
基本に忠実に、そのまま作っていきます。チュートリアルでは多角形を塗りつぶすサンプルを作るようです。初期プロジェクトの作成までは最低限のCOMプログラムと同じなので特に問題なし。こうしてできたファイルについてMSDNには色々と解説がついています。何となくわかります。ただ、「[ユーザーごとのリダイレクト]
オプションを [はい] に変更します。」の記述。・・・無いよ、それ(T_T)。まぁいいや・・・。
○ 手順2:コントロールの追加
ATLコントロールを追加するのが目的です。このコントロールという言葉・・・何とも曖昧でイメージが沸かないですよねぇ。Web上にもはっきりとした記述が見当たらないし。手持ちの書籍「ATL
COMプログラミング」にやっと答えを見つけました(332p上段)。抜粋します:
COMの偉大な点の1つは、ユーザーインターフェイスを備えたオブジェクトを作成し、そのオブジェクトにユーザーとのやり取りを許すという点です。このようなオブジェクトは、コントロールと呼ばれています。
COMの世界では、ユーザインターフェイスを備えてユーザとやり取りができるオブジェクトの事をコントロールと言うようです。大変に納得。
閑話休題。ATLコントロールとなるクラスを追加します。クラスビューでプロジェクトに対して[追加]→[クラス]。ATLのタブの中から[ATLコントロール]をもちろん選択。チュートリアルではこの後にいくつか変更を要すようです。
まずは「オプション」。接続ポイントをオンに。こうすると「IDLファイルでアウトゴーイングインターフェイス」がサポートされるとあります。・・・わかんないですよね。あぁ、答えを見つけましたよ。MSDNのここです(ATLコネクションポイント:http://msdn.microsoft.com/ja-jp/library/h7kad5hw(VS.71).aspx)。抜粋します:
接続可能なオブジェクトは、アウトゴーイング インターフェイスをサポートするオブジェクトです。アウトゴーイングインターフェイスを使用すると、オブジェクトはクライアントと通信できます。各アウトゴーイングインターフェイスについて、接続可能なオブジェクトはコネクションポイントを公開します。各アウトゴーイングインターフェイスは、クライアントによって、シンクと呼ばれるオブジェクトに実装されます。
つまり、アウトゴーイングインターフェイスはクライアントとの通信をするためのインターフェイスで、クライアント側は「シンク(Sink)」というオブジェクトとこれを接続することで通信が可能になると。ここで言う「通信」というのはメッセージのことかなと思います。要は、クライアントのメッセージを受けるインターフェイスかな。
続けましょう。[表示]ページで[挿入可能]にすると、埋め込みオブジェクトをサポートしているOfficeでも自分のATLコントロールが使えるようになるそうです。それは魅力ですね。
[ストックプロパティ]で[FillColor]を右の「サポートあり」へ移します。これもMFCですがMSDNに答えの記述がありました(MFC
ActiveX コントロール : ストックプロパティの追加:http://msdn.microsoft.com/ja-jp/library/6hx27e5c(VS.80).aspx)。:
ストックプロパティは、既にCOleControl クラスによって実装されているという点で、カスタムプロパティとは異なります。
FillColorは塗りつぶしで、それを担う機能はすでにCOleControlクラスに実装されているよ〜という意味かと思います。デフォルト機能がすでにあるのは嬉しいですね。これでATLコントロールの設定は終了です。
どうやらこれでもうビルドができるようです。実際にビルドすると、ソリューションエクスプローラに「PolyCtl.htm」というファイルが作成されます。この中はこんな感じになっています:
<HTML>
<HEAD>
<TITLE>ATL 8.0 のオブジェクト テスト ページ PolyCtl</TITLE>
</HEAD>
<BODY>
<OBJECT ID="PolyCtl" CLASSID="CLSID:E24E1770-FCD8-4BD3-B29D-9E9263A52C2A"></OBJECT>
</BODY>
</HTML>
OBJECT IDの所がポイントですね。CLASSIDにはいわゆるGUIDで、作成したATLコントロールを識別しています。このHTMLファイルをIEで開くとこうです:
出た!なるほどね〜。一先ず、今日はここまで。