アプリ終了について – プログラミング – Home

通知
すべてクリア

[解決済] アプリ終了について


GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

いつもお世話になっています、GGです。

アプリ終了についてお伺いいたします。
終了は2通りがあります、
1.メニューの「ファイル」→「アプリケーションの終了」にあります、
2.ウィンドウの右上×にあります。

目的というのは、終了直前にデータを保存します。

問題1:上記の1に、
void C***Doc::OnAppExit()
{
if (pPolyStructPart){
  ・・・ // 上書き保存、
 return;
}
AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_APP_EXIT);

結果は終了できません(アプリがOnAppExit()を繰り返し呼び出しています)

問題2:上記の2に、
終了の流れがわかりません、
保存用の関数(if (pPolyStructPart){…})はどこに置けばいいでしょうか、

以上、よろしくお願いします。
環境:.Net(2002) MFC使用、Win2000


引用未解決
トピックタグ
GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

修正
if (pPolyStructPart){
  ・・・ // 上書き保存、
 return;
}
AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_APP_EXIT);

return;は
//return;
です。
if (pPolyStructPart){
  ・・・ // 上書き保存、
 //return;
}
AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_APP_EXIT);

よろしくお願いします。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

なぜに非推奨とされてる C**App::OnAppExit で処理をするのかな?
MSDN 読んだ?
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/vclib/html/_MFCNOTES_TN022.asp

> AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_APP_EXIT);
OnAppExit 中で、再度 AppExit を呼ぶよう指示してるから当然の動きだよ
どうせ書くなら CWinApp::OnAppExit(); のほうがいい。
でも Microsoft 非推奨な使い方なので MSDN に従って修正するべきだね。


返信引用
GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

tetrapod さん、
ご返事ありがとう。

問題1が解決しました。
void C***Doc::OnAppExit()
{
...
AfxGetMainWnd()->PostMessage(WM_CLOSE);

よろしくお願いします。


返信引用
ぬふや
 ぬふや
(@ぬふや)
ゲスト
結合: 18年前
投稿: 34
 

ドキュメントクラスのデストラクタで保存処理するのは反則でしたっけ。


返信引用
GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

問題2も解決しました。
保存用関数は
OnDestroy()に置けばOKです。

ありがとうございました。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

Doc-View を使っているともいないとも書いていないし、
そもそも俺のコメント正しく読んでないとしか思えないんだけど。

まあ案件がはっきりしないのでなんともいいがたい。

「Doc-View を使っていて C**Doc を保存したい」のであれば
そもそも AppExit で処理すること自体が Doc-View を理解していない証拠。
普通には Serialize を実装していれば勝手にやってくれるわけだし。
MSDN の言葉をそのまま借りれば Doc がデーターベースそのものであるなら
データベースを閉じるには OnCloseDocument を使うべき。

何をいつ何の目的で保存するのかで解決策は違う。

「アプリケーションの終了」という文言にとらわれすぎてると道を見誤るよ。
Doc-View を正しく使っていれば、アプリケーションの終了処理の一環として
先に Doc の保存が走るから「終了ハンドラ」で保存する必要は一切無い。


返信引用
GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

tetrapodさん、
ご返事ありがとう.

>何をいつ何の目的で保存するのかで解決策は違う。
説明が足りないです、すみませんでした。

>データベースを閉じるには OnCloseDocument を使うべき。
OnCloseDocument()を使いました。

ご指導ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました