タイトル【Carbon化シリーズ】プログラム-DoQuitCommand, CloseDocWindowカテゴリーCarbon/CF, Carbon化
作成日2000/6/28 0:53:59作成者新居雅行

《ソースファイル:DoCommand.c》

// File-Quitを選択したとき(レコーディングには非対応)
void DoQuitCommand()
{
WindowPtr targetWindow;

Finish = true; //アプリケーション終了を示すフラグを立てます
//開いているウインドウを全部閉じます
for( targetWindow = FrontWindow();
targetWindow != 0;
targetWindow = (WindowPtr)((WindowPeek)targetWindow)->nextWindow)
if(DoCloseCommand() == false) { //閉じる時にキャンセルボタンをクリックした
Finish = false; //フラグを元に戻しテク
return;
}

if(availTSMInline) //TSMアプリケーションのクローズ
CloseTSMAwareApplication();
}

《ソースファイル:WindowSet.c》

extern Boolean Finish;

// ウインドウを閉じる。保存を行ったらtrueを戻す
Boolean CloseDocWindow(WindowPtr targetWindow)
{
DocRecHandle docH;
OSErr er;

if(targetWindow == 0) return false; //念のためにチェック
docH =GetDocHandle(targetWindow); //DocRecordを取得
if(((**docH).isDarty & 1) != 0) { //isDartyの1ビット目を見る。つまり修正された場合
NavAskSaveChangesResult reply;
NavAskSaveChangesAction action;
NavDialogOptions dialogOptions; //変数を用意する

NavGetDefaultDialogOptions(&dialogOptions); //ダイアログ設定は既定値
CopyString(dialogOptions.savedFileName, (**docH).fileName);
if (Finish) //終了プロセス中ならば
action = kNavSaveChangesQuittingApplication;
//アプリケーション終了のメッセージ
else //終了中でないなら、単に1つの文書を閉じるとき
action = kNavSaveChangesClosingDocument;
//文書を閉じる時のメッセージ
er = NavAskSaveChanges(&dialogOptions, action, &reply, NULL, NULL);
//保存していいかをたずねるダイアログボックスを表示する

if(reply == kNavAskSaveChangesCancel)
return(false); //何もしないなら関数を抜ける
if(reply == kNavAskSaveChangesSave)
DoSaveCommand(); //するなら保存
}
DisposeAllObject(targetWindow); //オブジェクトをすべて削除し
DisposeDocWin(targetWindow); //ウインドウを閉じる
if(FrontWindow() == 0) //ウインドウが1つもないのなら
DisableItem(GetMenuHandle(FileMenuID), CloseItem);
//File-Closeをグレーにする
return true;
}
関連リンク