OnActivateViewの中で使用できるメッセージ出力ありませんか!

[戻る]
wood 2002/10/15(火) 07:10:49
OS:Win XP
VC++6.0 MFC使用

CFormViewを使ってプログラミングしています
OnActivateViewの中で条件判断
をして
if(MessageBox( "DATA NOT FOUND","  XXXX MAST",
   MB_YESNO | MB_ICONERROR    )  == IDYES)    {
   DTA_STS        =    1;
}

のようなことをしていますが

メッセージボックスの表示後
「はい」・「いいえ」のどちらのボタンを押しても
IDYESを判定する前に、
OnActivateViewの先頭へ処理が戻ってしまいます

これはデバック「ステップ 実行」で確認しました
どのようにすれば
IDYESを判定することができるようになるでしょうか?
よろしくお願いします

EIJI 2002/10/15(火) 11:01:05
「メッセージボックス終了後」→「ビューがアクティブ」の無限ループのような気がします。
OnActivateView()の中でビューが非アクティブになるようなことをするのがまずいのかも。

PATIO 2002/10/15(火) 13:25:23
この手の無限ループは良くある話で、要するに画面の再描画に絡む所に
メッセージボックスを出すようにしていると抜けられなくなるとか、
今回のようにメッセージボックスが消えると元のビューがアクティブになるなど
Windowsのこうした仕組み的な部分を理解していないと起こる現象です。

逆にいうならOnActivateViewの中でMessageBoxを出す必要があるような
プログラム的な仕組みそのものに問題があると考えるべきでしょう。
もっと他のタイミングで判定する方向で考えるべきだと思います。

wood 2002/10/15(火) 18:31:19
PATIOさん
大変貴重な情報ありがとうございます

勝手な解釈ですが関数の戻り値よりもイベント発生のほうが優先される
と解釈してよろしいのでしょうか(windowsでは)
こんな説明は見たこと無いですけど
どこかにこんな説明あったら教えてください(参考までに)

今回の質問に対しては
第一フォーカスのあたる所で条件チェックするように変更してみます

wood 2002/10/16(水) 06:55:18
[[解決]]
>第一フォーカスのあたる所で条件チェックするように変更してみます
でもうまく動作できませんでした

質問の趣旨が変わるので解決にします

古いスレッドには追加発言できません。