● ToolBox API徒然草(2006/01/07)

  このニュースは、MOSAの会員にのみ配布されているデベロッパー向けの
  デジタルマガジンMOSADeNのに掲載された記事です。ほぼ一ヶ月遅れで
  ここに掲載されて行きます

 〜 画像ファイルをウィンドウに表示する(その6) 〜


あ今回は「画像ファイルをウィンドウに表示する」の最終回です。HIViewSetLayoutInfo()に渡すHILayoutInfo構造体について詳しく解説し、Mac OS X 10.4により、今まで解説してきた3つのルーチンの処理内容がどう変化したかを見てみます。

Mac OS X 10.3から、あるViewが、それが埋め込まれているViewに対して、どのような位置関係を保つのかを自動制御できるようになりました。これを、HIViewの自動レイアウト機能と呼びます。自動レイアウト機能を実現するのには、前回紹介したHILayoutInfo構造体に適切な情報を記載してHIViewSetLayoutInfo()に渡します。HILayoutInfo構造体の内部構造は、HIBinding構造体、HIScaling構造体、HIPositioning構造体の3つのパートに分かれています。

struct HILayoutInfo { // 自動レイアウト情報構造体
UInt32 version; // kHILayoutInfoVersionZeroを代入(固定)
HIBinding binding; // Bind情報のための構造体(A)
HIScaling scale; // Scale情報のための構造体(B)
HIPositioning position; // Position情報のための構造体(C)
};

(A)Bind情報報を格納するHIBinding構造体(他のViewとの縁との距離を保つ)
(B)Scale情報を格納するHIScaling構造体(他のViewとの相対サイズを保つ)
(C)Position情報を格納するHIPositioning構造体(他のViewとの相対位置を保つ)

Bind情報はHIBinding構造体に格納されます。HIBinding構造体には、メンバーとして4つのHISideBinding構造体が含まれており、それぞれが上下左右の縁と別のViewの縁との距離を一定に保つかどうかを指定します。Scale情報はHIScaling構造体に格納されます。HIScaling構造体には、メンバーとして2つのHIAxisScale構造体が含まれており、それぞれX方向およびY方向に対象となるViewとのサイズ比率を代入できます。Position情報はHIPositioning構造体に格納されます。HIPositioning構造体には、メンバーとして2つのHIAxisPosition構造体が含まれ、それぞれX方向およびY方向に対象となるViewとの相対位置を固定できます。

自動レイアウト機能に用いられている各構造体の詳しい役割については、以下のサイトに「HIView Programming Guide」の日本語要約がありますので、そちらとヘッダファイルのHIView.hを参照してみてください。

http://www.mosa.gr.jp/htmdocs/article/document-2005oct.php

以下が、Mac OS X 10.4では不必要となった処理を外したsetupViwerWindow()ルーチンです。ウィンドウのズーム処理のために制限サイズを保存していたSetControlMinimum()やSetControlMaximum()はもう必要ありません。また、SetControlID()でセットしていたControl IDやSignatureも利用しないので処理が省略されています。



Mac OS X 10.4ではウィンドウのズーム処理も省略することができます。よって最終的には、setupViwerWindowEvent()で用意するEventTypeSpecは2種類まで減らすことが可能になりました。また、myViwerWindowEventHandler()の方も、Mac OS X 10.4対応で簡素化されています。



前回も紹介しましたが、Mac OS X 10.4になり、SetWindowResizeLimits()で設定したサイズ限界が画像ウィンドのズーム処理にも適応されるようになりました。そのおかげで、Event HandlerのkEventWindowZoom処理を実装する必要がなくなりました。最終的に残ったのは、ウィンドウを閉じる処理のみです。画像ウィンドウに関する処理は、ほとんどシステム側のStandard Event Handlerが行ってくれることになり、開発者側で用意する処理ボリュームはかなりダイエットされたことになります(笑)。

次回からは、本サンプルアプリケーションのUniversal Binary化(インテルCPU対応)について解説していきたいと思います。まずは、現在の開発プロジェクトをMetrowerks CodeWarriorからXcode 2.2へ移植する話からスタートしたいと思います。


copyright 2006 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact us: koike@ottimo.co.jp