EternalWindows
OLE埋め込み / 埋め込みの意味

あるアプリケーションを開発している際に、他のアプリケーションの機能が欲しくなることがあります。 たとえば、何らかのデータを表の形式で表示したいアプリケーションは、 リストビューのようなコントロールで表を再現するのではなく、 Excelの表そのものを自分のウインドウに貼り付けたいと考えるかもしれません。 このようにすれば、開発者はコードを書く量が減ることになりますし、 ユーザーとしても使い慣れたExcelの表を扱えるという利点が生じます。 OLEにおける埋め込みとは、他のアプリケーションのウインドウのイメージを自作のウインドウに表示することであり、 このイメージをダブルクリックした場合は、アプリケーションのウインドウが表示されるのが一般的です。

OLEでは、特定のアプリケーションに埋め込まれるCOMオブジェクトをオブジェクトと呼び、 オブジェクトを埋め込むアプリケーションをコンテナと呼びます。 既存のコンテナとして有名なのは、WordやExcelのようなOfficeアプリケーションでしょう。 これらは、挿入タブから「オブジェクト」という項目を選択することで、 オブジェクトを埋め込むためのダイアログを表示できるようになっています。 今回作成することになるコンテナアプリケーションも、 次のようなダイアログを通じてオブジェクトを埋め込むことになります。

このダイアログに名前が記述されているアプリケーションは、埋め込み可能なオブジェクトを作成していることを意味します。 WordやExcelはオブジェクトを埋め込む機能を持っているわけですが、 上図のダイアログに名前が含まれていることから分かるように、 WordやExcelは埋め込み可能なオブジェクトも作成しています。 また、スクロールすれば分かるように、ペイントやワードパッドの名前も含まれています。 これらのアプリケーションはオブジェクトを埋め込む機能は持っていませんが、 埋め込まれるための機能は持っていることになります。 ダイアログでオブジェクトの名前を選択すると、そのオブジェクトのアプリケーションは実際に起動され、 オブジェクトの内部状態は実行中に変化します。 次に、Excelのワークシートを埋め込んだ例を示します。

見て分かるように、Excelのワークシートのイメージがアプリケーションのウインドウに表示されています。 このような状態の事を、オブジェクトが埋め込まれていると表現します。 今回のアプリケーションはイメージがダブルクリックされた場合に、 オブジェクトのウインドウを実際に表示します。 このとき、オブジェクトの状態はアクティブになります。

ウインドウで何らかの編集作業を行った場合は、その内容がイメージに反映されることになります。 ウインドウを閉じた場合は、オブジェクトを作成したアプリケーションは終了することになり、 オブジェクトの状態は休止状態になります。

今回のプログラムでは、オブジェクトが常にクライアント領域の左上隅に表示されることになっているため、 複数のオブジェクトを埋め込む場合は、オブジェクトが重なって表示されることになります。 このような場合は、オブジェクトをドラッグすることで任意の位置へ移動するようにします。 「ファイル」メニューから保存を選択した場合は、現在埋め込まれているオブジェクトの情報が独自の拡張子を持ったファイルに保存されます。 このファイルを読み込むようにした場合、各オブジェクトが保存時に表示されていた位置へ表示されることになります。 オブジェクト上で右クリックした場合は、ポップアップメニューが表示されることになります。


戻る