Chapter.10

ツールバー(2)

2005/1/6
 ・インターフェースが継承可能であることが判明したのでサンプルソースを修正。

1.ペイントブラシのツールバーを表示するためには

前章で提示したサンプルでは、ExcelとペイントブラシのOLEサーバをインプレースアクティブ化した場合、ツールバーを表示出来ない問題があります。 これは、インプロセスハンドラを使用していないことが原因です。 インプロセスハンドラを使用していない理由は、インプロセスハンドラがIPersistFileを実装していない(インプロセスハンドラはシリアライズ化を処理しない)ため、 構造化ストレージの解説無しに初期化処理を解説するのが、とても面倒困難に思えたからです。

インプロセスハンドラの解説だけで、数章〜十数章に達することが見込めるほど、その内容は大きいのです。 インプロセスハンドラの解説は後回しにして、引き続きインプレースアクティベーションを解説したいと思います。 とりあえず、「インプロセスハンドラと呼ばれるモノを使用している。」という考えを持って置いてください。

インプロセスハンドラを使用してOLEサーバを起動するように書き換えたサンプルソースです。
VB.NETサンプルソース:chap10.vb.lzh(33KB未満 2005/1/6)

下の図は、ペイントブラシをインプレースアクティブ化してみたところです。


下の図は、Excelをインプレースアクティブ化してみたところです。



2.OleCreateFromFile

サンプルを見てもらうと解ると思いますが、インプロセスハンドラの使用方法とは単純に、OLEサーバの起動にOleCreateFromFileを使用しているだけです。 OleCreateFromFile関数は、必要に応じてインプロセスハンドラを使用し、適切な初期化処理を行ってくれます。 極めて便利なのですが、IStorageを引数に取るため、構造化ストレージの知識を多少要求されます。 また、インプロセスハンドラの動作に影響するOLERENDER型の引数を取ります。 現時点では、このOLERENDERには、OLERENDER_DRAWを渡すだけで問題ありません。 この値は、ディスプレイに対して出力を行うことを示します。


3.まとめ

ツールバー(2)とタイトルを付けながら、結局、ツールバーに関しては何も解説していませんし、 インプレースアクティベーションに関する解説も行っていません。 始めの章で述べていたOLEサーバ毎に多量のif文を書かなければならない時期に突入した気がします。

なお、この章の変更によって、HTMLファイルは表示不可能となります。 HTMLファイルのOLEサーバは、実際には、ActiveXコントロールであり、現時点では、ActiveXコントロールをサポートするための機能が不足しています。 これは、ActiveXコントロールの章(があれば、そこ)で解説する予定です。


前へ 次へ
OLE on .NET Frameworkへ
総合トップへ