タイトル | 【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/>] | |
関連リンク |