void DoOpenCommand() { OSErr er; NavReplyRecord reply; NavDialogOptions dialogOptions; NavTypeListHandle typeList; Point dialogPosition = {-1,-1}; AEDesc defLoc; FSSpec defLocSpec; short fVolRef; long fDirID;
NavEventUPP neProc = NewNavEventProc(myNavEventProc); //イベント処理関数のユニバーサルポインタを用意 MyUserData uData = {15,16}; //ユーザデータを初期化
typeList = (NavTypeListHandle)GetResource(’open’, 128); // openリソースをそのまま利用する NavGetDefaultDialogOptions(&dialogOptions); //ダイアログ設定は既定値 er = FindFolder (kOnSystemDisk, kDocumentsFolderType, kDontCreateFolder, &fVolRef, &fDirID); //書類フォルダを探す er = FSMakeFSSpec(fVolRef, fDirID, "\p", &defLocSpec); //書類フォルダのFSSpecを構築 er = AECreateDesc(typeFSS, &defLocSpec, sizeof(FSSpec), &defLoc); //書類フォルダのAppleEventディスクリプタを生成
er = NavChooseFile (&defLoc, &reply, &dialogOptions, neProc, NULL, NULL, typeList, &uData); //ダイアログボックスを表示 if(er == noErr && reply.validRecord) { //ファイル選択が行われたなら long count, index; er = AECountItems(&(reply.selection), &count); //選択されたファイルの個数を得る if ( er == noErr) { for (index = 1; index <= count; index++) { //1つ1つのファイルを取得する AEKeyword theKeyword; DescType actualType; Size actualSize; FSSpec documentFSSpec;
er = AEGetNthPtr(&(reply.selection), index, typeFSS, &theKeyword, &actualType,&documentFSSpec, sizeof(FSSpec), &actualSize); if (er == noErr) LoadFromFile(&documentFSSpec); //ファイルを開く } } er = NavDisposeReply(&reply); ReleaseResource((Handle)typeList); } AEDisposeDesc(&defLoc); //ディスクリプタを破棄 } |