● ToolBox API徒然草(2005/06/16)

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

 〜 ドラッグ&ドロップの活用(その3) 〜


今回は、ドラッグ&ドロップとは直接関係ありませんが、reciveCatalogWindow()の中から呼ばれている自作ルーチンについて解説します。Recive処理の最終目的を達成させるための一例として参考にしてみてください。

以下が、前回紹介したreciveCatalogWindow()から呼ばれているaddImageFile()ルーチンです。このルーチンは、データブラウザにドロップされたアイコンがQuickTimeで表示可能な「画像ファイル」の場合にのみ実行されます(前回のケース1)。



画像ファイルのデータブラウザへの登録処理は非常に簡単です。newObject()ルーチンに対象ファイルのファイルタイプとFSSpecを渡し、ドロップされたアイコンの個数分だけObject構造体を確保します。登録後のボタン表示の変更(メンテナンス)や、データブラウザの一覧表示の更新などについては、以下のmainteAddImageFile()が担当しています。この中で実行されているaddItemDataBrowser()とmainteCatalogWindow()の2つのルーチンについては既に解説済みですので、そちらを再度参照してみてください。



次は、同じくreciveCatalogWindow()から呼ばれているaddImageFolder()ルーチンです。このルーチンは、データブラウザにドロップされたアイコンが「フォルダ」の場合にのみ実行されます(前回のケース3)。



フォルダアイコンがブラウザへドロップされた場合には、そのフォルダに含まれているすべての画像ファイルを登録することになります。そのため、先んじて対象フォルダ内に保存されているファイルのカタログリスト(一覧)が必要となります。こうしたファイル(当然フォルダも含まれる)の一覧を得るには、File Managerに属するPBGetCatInfo()を利用します。まず最初に、CInfoPBRec構造体に対象フォルダのボリュームリファレンス番号(fsc->vRefNum)、ディレクトリID(fsc->parID)、加えてリスト内のインデックス番号を(1から始まるので注意)を代入しておきます。続いて、そのCInfoPBRec構造体をPBGetCatInfo()に渡して実行すれば、指定インデックス番号のファイル(もしくはフォルダ)の名称を得ることができます。

渡したインデックス番号がリストの個数より多い場合には、PBGetCatInfo()はエラーを返しますので、処理ループから抜けて作業を終了します。また、登録対象にはならないフォルダや不可視ファイルについては、先んじてカタログのアトリビュート(ioFlAttri)やファインダフラグ(fdFlags)をチェックして登録対象から除外しておきます。ちなみに不可視ファイルとしては、フォルダアイコンなどが含まれます。続いて、Navigation Serviceの解説時に紹介したnavCheckImportExtention()とnavImportCheckTypeList()を使い、QuickTimeで表示できる画像ファイルかどうかを調べてから、対象となるファイルのみをnewObject()で登録します。この時のファイル名は、crec.hFileInfo.ioNamePtrに代入しておいたパスカルストリングス(name)に返されますので、それを参照します。

最後は、データブラウザにドロップされたアイコンが「ドキュメント」の場合にのみ実行されるloadObjectFile()ルーチンです(前回のケース2)。



loadObjectFile()ルーチンでは、ドキュメントファイルから個数分のファイル登録情報(Object構造体)を読み込み、その内容を順次newObject()で登録して行きます。指定ドキュメントファイルに幾つのファイル情報が含まれているのかは、ファイルの先頭に保存されている個数(unsigned long値)を読み込むことで判断することが可能です。

次回は、ドラッグ&ドロップにおけるSend処理を紹介します。ウィンドウ上のオブジェクト(画像やテキスト)をドラッグし、相手(もしくは自分自身)に渡す(ドロップする)方法を解説したいと思います。


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