タイトル【Carbon化シリーズ】Navigation Serviceに対応(3)-DoOpenCommandカテゴリーCarbon/CF, Carbon化
作成日2000/6/10 11:43:49作成者新居雅行
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);   //ディスクリプタを破棄
}
関連リンク