今回は「Navigation Service APIの活用」の最終回です。FSSpecの代わりにFSRefを得るために有用なシートウィンドウ版の「フォルダ選択ダイアログ」と「ファイル名選択ダイアログ」を紹介したいと思います。
まず最初に、フォルダ選択用のシートウィンドウを表示するnavChooseFolderSheet()ルーチンを紹介します。使用方法は以前(その3)で解説したnavPutFileSheet()ルーチンとほとんど同じですので、そちらを参照してください。前回と少し異なるのは、フォルダ選択時に親ウィンドウが存在しないと(window==NULLの場合)シートウィンドウではなく、通常のモーダルダイアログとしてオープンするように設定されている箇所です。フォルダが選択された後の実際の処理は、NavCreateChooseFolderDialog()に引数として渡されるイベント処理ルーチンのnavGetEventSheeProc()の方に記述します。

次は、ファイル選択用のシートウィンドウを表示するためのnavGetFileSheet()ルーチンです。navChooseFolderSheet()と異なるのは、前回紹介したnavMakeTypeList()で、選択対象ファイルタイプをNavTypeListHandleに変換してから渡している箇所です。ただし、今回は拡張子によるファイルタイプの判断はしていませんので、実際にこのルーチンを用いる場合には、前回と同様にフィルタルーチンによる判断が必要な場合もあります。注意してください。

両シートウィンドウにおけるユーザ操作(ボタンクリック等)に対応するための処理は、NavCreateChooseFolderDialog()とNavCreateGetFileDialog()に引数として渡されているnavGetEventSheeProc()(イベント処理ルーチン)の方に記述します。フォルダやファイルが選択され、ウィンドウ上の「選択」や「開く」ボタンが押されると、このルーチンが呼ばれることになります。ユーザの操作内容は、引数で渡されるNavCBRecPtr経由で判断することが出来ます。今回は、どちらのボタンクリックでもnavGetEventSheeProc()ルーチンが呼ばれていることが理解できます。

getFilesInfo()ルーチンがどちらの処理から呼ばれたのかは、引数のkindがゼロか1かで判断できます。最初にAEGetNthPtr()を使い、選択された個数分だけフォルダやファイルのFSRefを得ます。その後、FSGetCatalogInfo()によりFSRefをFSSpecへ変換し、同時にFSpGetFInfo()によりファイルタイプを得て、それ以降の処理に渡すための情報を準備しています。しかし、こうした処理はアプリケーション側の処理内容によっては不必要な場合もあるでしょう。

今回で「Navigation Service API」の話は終了です。次回は、Macintoshの「もうひとつのファイル読み込み方法」である、Finderからアプリケーションへのアイコン(フォルダやファイル)のDrag&Dropについて解説したいと思います。
copyright 2005 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact us: koike@ottimo.co.jp