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を判定することができるようになるでしょうか?
よろしくお願いします
「メッセージボックス終了後」→「ビューがアクティブ」の無限ループのような気がします。
OnActivateView()の中でビューが非アクティブになるようなことをするのがまずいのかも。
この手の無限ループは良くある話で、要するに画面の再描画に絡む所に
メッセージボックスを出すようにしていると抜けられなくなるとか、
今回のようにメッセージボックスが消えると元のビューがアクティブになるなど
Windowsのこうした仕組み的な部分を理解していないと起こる現象です。
逆にいうならOnActivateViewの中でMessageBoxを出す必要があるような
プログラム的な仕組みそのものに問題があると考えるべきでしょう。
もっと他のタイミングで判定する方向で考えるべきだと思います。
PATIOさん
大変貴重な情報ありがとうございます
勝手な解釈ですが関数の戻り値よりもイベント発生のほうが優先される
と解釈してよろしいのでしょうか(windowsでは)
こんな説明は見たこと無いですけど
どこかにこんな説明あったら教えてください(参考までに)
今回の質問に対しては
第一フォーカスのあたる所で条件チェックするように変更してみます
>第一フォーカスのあたる所で条件チェックするように変更してみます
でもうまく動作できませんでした
質問の趣旨が変わるので解決にします