Chapter.13

メニュー(2)

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

1.メニューグループ

前章では、OLEサーバのメニューを表示する方法について解説しました。 この章では、アプリケーション独自のメニューを追加する方法について解説します。

OLEでは、メニューを6つの部分に分割し、それらの使用方法を定義しています。 それら分割された部分のことをメニューグループと呼んでいます。 6つのメニューグループは、アプリケーションとOLEサーバで、それぞれ使う位置が決められています。
位置 名前 使用者 概要
1 ファイル アプリケーション 標準のファイルメニューを示し、ファイルの操作、印刷、パブリッシング及びアプリケーションの終了のために使用されます。
2 編集 OLEサーバ 対象を編集するために使用されます。標準的な編集メニューを実装することが推奨されます。
3 表示 アプリケーション アプリケーション全体の表示に関する動作を決定するのに使用されます。ツールバーやステータスバーの表示/非表示、フォントのサイズ及びレイアウトの切り替え等です。
4 オブジェクト OLEサーバ 対象となるオブジェクトを操作するための専用メニューです。ここでは標準的な動作は要求されません。OLEサーバの実装に任せられます。
5 ウィンドウ アプリケーション 主にMDIウィンドウに関するメニューに使用されます。
6 ヘルプ OLEサーバ ヘルプに関するメニューを表示します。目次、検索及びバージョン情報等です。

メニューグループには、1つ以上のメニューを含むことが出来るため、3つしかメニューを配置できないわけではありません。 では実際に、アプリケーションのメニューとOLEのメニューをマージしたモノを見てみましょう。 下の図は、ファイルメニューグループの位置にアプリケーションのメニューを全て配置したものです。


下の図は、ファイル、表示及びウィンドウメニューグループの位置にアプリケーションのメニューをそれぞれ配置したものです。


この図では、オブジェクトメニューグループの位置に、ペイントブラシが独自のメニューを3つ追加しているのが分かります。 そのうちの1つが表示なので、アプリケーションが表示メニューグループに表示という名前でメニューを配置すると名前が被ってややこしくなりますね。


2.メニューのマージ

アプリケーションとOLEサーバのメニューをマージ出来るように修正したサンプルソースです。
VB.NETサンプルソース:chap13.vb.lzh(36KB 2005/1/7)

メニューのマージを処理するだけならば、IOleInPlaceFrame.InsertMenusを実装するだけで良いのですが、後始末を行うために、IOleInPlaceFrame.RemoveMenusも実装しなければなりません。
今回、実装するにあたり、OLEIDL.IDLから単純に移植してこなかったものがあります。 それはOLEMENUGROUPWIDTHS構造体です。 この構造体は、最初に解説したメニューグループの配置に使用されます。 本来の構造体は、IDLでlong型の配列になっているのですが、これは理解しにくいので配列を展開して、それぞれ構造体のメンバーとして名前を付けています。


3.まとめ

コンポジットメニューの解説は、これでほとんど終わりです。 今回で、OLEサーバのユーザーインターフェースに関する処理は、ほぼ解説が完了しました。 次回からは、リンクコンテナの解説に入ります。

1つだけヘルプメニューのマージというものを解説していないのですが、それはActiveXドキュメント以降に追加された仕様なので、ActiveXドキュメントを解説するときに解説したいと思います。


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