ホーム < ゲームつくろー! < IKD備忘録

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で開くとこうです:

出た!なるほどね〜。一先ず、今日はここまで。