● ToolBox API徒然草(2004/01/06)

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

 〜 HIViewを利用したテキスト編集(後半) 〜


前回は、NibファイルのユーザインターフェースオブジェクトとしてText ViewとScroll Viewを用意し、左右、上下スクロールバー付きのテキスト編集ウィンドウを表示してみました。今回は、Nibファイルを読み込むのではなく、HIViewのAPIのみを用いて前回とまったく同じ処理を実現してみます。

まず先んじて外部変数にHILayoutInfo構造体であるs_layoutを確保しておきます。前回では、Interface BuilderのInfoウィンドウ「Layout」タグにより、Scroll Viewの位置を親HIView(ウィンドウ)のTop、Left、Bottom、Rightと一致させるようにしました。この構造体の内容は上記の操作とまったく同じ意味を持ち、これをHIViewSetLayoutInfo() APIに渡すことで目的のHIViewに特定のレイアウトを設定することが可能です。ただし、設定されたレイアウトが有効なのはMac OS X 10.3以上の環境に限られますので注意してください。HILayoutInfo構造体の内容についてはUniversal InterfacesのHIView.hを参照してください。コメントにより詳しく解説されています。



以下が、APIのみを使いテキスト編集ウィンドウを表示するapiTextScrollView()ルーチンです。CreateNewWindow()やSetWindowTitleWithCFString()は一般的なウィンドウ作成処理です。この時、ウィンドウのアトリビュートとしてkWindowCompositingAttributeを設定しておくことを忘れないでください。



最初にHIViewFindByID()でウィンドウのHIViewRefを得ます。それをHIViewGetBounds()に渡してウィンドウ(親HIView)のフレームサイズ(矩形枠)を得ておきます。Scroll Viewの作成にはHIScrollViewCreate()を使います。kHIScrollViewValidOptionsを引き数で渡すことにより、Scroll Viewには左右、上下スクロールバーとグロウボックスが表示されます。HIViewSetFrame()でウィンドとまったく同じ矩形枠サイズを指示したら、先んじて用意しておいたHILayoutInfo構造体(s_layout)をHIViewSetLayoutInfo()でセットします。HIViewSetVisible()で表示をONにし、HIViewAddSubview()でウィンドウに埋め込めば(Embedする)まずは第一段階終了です。

続いてHITextViewCreate()でText Viewを作成し、TXNSetData()により最初に表示させるテキストデータをセットしておきます。前回も説明しましたが、Text Viewに対して何らかのテキスト操作をしたい時は、MLTE(Multilingual Text Engine)のAPIを使います。HIViewSetVisible()でText Viewも表示ONにしたら、HIViewAddSubview()でScroll Viewに埋め込みます。テキストに対する後処理のことを考慮し、SetControlID()でText Viewに識別子(Signature:'text' ID:1)を設定しています。最後にShowWindow()でウィンドウを表示すれば作業は終了です。

スクロールバー付きウィンドウ内でのテキスト編集は、MLTEを用いた時とまったく同じだということを確認してみてください。HIViewの詳しい内容については、以下から参照できる「Introducing HIView」が参考になります。PDF版のドキュメントも存在します。

http://developer.apple.com/documentation/Carbon/Conceptual/HIViewDoc/index.html


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