タイトル【MacWIRE配信予定】小池邦人のプログラミング日記》2002/2/15 _ ウィンドウのグループ化 その1(2)カテゴリーユーザインタフェース, Carbon/CF, 小池邦人のプログラミング日記
作成日2002/2/15 15:58:39作成者新居雅行
まずは「テキスト」ボタンをクリックでした時に呼ばれるhandlTextEdit()ルーチンを見てみます。

 

最初にNibファイルからTextEditコントロール用のウィンドウ(EditWindow)を作成し、適切な位置へと移動させています。オープンする前に、SetWindowGroup()でMainWindowと同グループに登録し、それの表側に表示させるためにSelectWindow()を実行しています。ChangeWindowGroupAttributes()は、グループに新たに追加するアトリビュートと、グループから外してしまうアトリビュートを同時に設定できるAPIです。ここでは、一時的にウィンドウ選択を可能にするために「個別ウィンドウの選択が不可」というアトリビュート(kWindowGroupAttrSelectAsLayer)を外しています。これを外さないと、SelectWindow()を実行してもEditWindowがMainWindowの表側に現れません。最後は、getMyControlRef()でTextEditコントロールのControlRef得て、サンプル文字列(This is the EditText.)を登録しています。ShowWindow()でEditWindowを表示したら、AdvanceKeyboardFocus()を実行してTextEditコントロールをテキスト入力可能な状態にしておきます。

今度は「ポップアップ」ボタンをクリックした時に呼ばれるhandlPopUp()ルーチンを見てみます。

 

ポップアップされるSheetウィンドウ(SheetWindow)は、Nibファイルから作成されています。しかし、このウィンドウはMainWindowを親にはせず、CreateNewWindow()で作成された縦横1ピクセルサイズのOverlay(下地が透明)ウィンドウを親として使っています。これが、SheetWindowがMainWindowの一点から湧き出したように見えるトリックの種明かしです。SheetWindowをShowSheetWindow()でオープンしたら、MainWindowの方はHideWindow()で隠してしまいます。最後に、親ウィンドウの方も削除するのですが、SheetWindowは戻る場所を記憶していますので問題はありません。親ウィンドウに利用しているOverlayウィンドウの性質については、別の機会に詳しく説明します。

ここで解説した「Group_Demo1」サンプルアプリケーションは、以下のサイトに登録されていますので試してみてください。Mac OS X 10.1と最新版のDeveloper Toolsが必要です。

 http://www.ottimo.co.jp/library/

次回は、ウィンドウのグループ化の話の続きとなります。ウィンドウタイトルに配置することができるようになったToolBarボタンの利用方法についても解説します。
[小池邦人/オッティモ<http://www.ottimo.co.jp/>]
関連リンク