ダイアログ閉じた後でオーナーウィンドウが背後に回る

[戻る]
masa 2005/06/15(水) 08:38:54
Windows2000, VisualC++6.0

題目通り、とあるダイアログをDialogBoxで呼び出した後で、
CANCEL等をしてEndDialog(hDlg, false)すると、今まではそのまま親ウィンドウに戻ったので
すが、
追加したダイアログでほぼ全く同じ設定値のはずなのに、親ウィンドウが隠れてしまいます。
最小化されたわけでは無いみたいです。
他のダイアログでDialogBoxで呼び出してから親ウィンドウに戻っても大丈夫ですが、
新しく追加したダイアログは駄目でした・・・。
特にどこかを弄った訳では無いのですが、何か原因になり得るものありますでしょうか?

masa 2005/06/18(土) 03:56:55
未だ解決しないのですが、何か助言頂けませんでしょうか・・・。
ビルドしたプログラムでも同様に、特定のモーダルダイアログ(DialogBox)を閉じると親ウィン
ドウのメインウィンドウが一つ下に隠れてしまいます。
最小化ではないのです。他のダイアログと設定は同じはずなのですが・・・。

Ban 2005/06/18(土) 08:53:28
# 私には思い当たることがありませんし、状況も分かりかねますので、
# あくまで一般的な助言を。

実際のコードなしに同じはずと書かれても、
どこかでミスや勘違いをしてると想像するくらいしか出来ませんので、
できれば最小限の再現コードなど提示してみてはどうでしょう。
これを作る過程で問題の原因が分かることも多々あると思います。

版管理していないならまずはバックアップを取って、
他のダイアログと処理内容が同じになるように一つづつ処理を外して/追加していけば、
挙動がかわったった時が犯人だと思います。
その部分について具体的にコードを示せば助言も得やすいのではないでしょうか。
この時点で「分かってしまえば聞くまでもない」可能性もあります。

また、全部実処理を外してスケルトン状態でも現象が再現する場合でも、
そのコードを示せば助言は得やすくなると思います。

forty-five 2005/06/19(日) 09:09:55
これって多分 Windows の仕様だと思いますよ。
MFC が ::SetActiveWindow() 使って自前でアクティブにしているぐらいなので
自分で適切なウィンドウをアクティブにしないとダメなんじゃないかと思います。

アクティブにするウィンドウの取得は ::GetLastActivePopup() を使うといいです。

masa 2005/06/20(月) 05:46:57
なるほど。。何故残り二つのダイアログが、ちゃんと親ウィンドウに戻るかが不思議ですが。
ちょっと質問の仕方が悪かったですね。
どういう場合において、親ウィンドウにちゃんと戻らないでしょうかと訊けば良かったかもで
す。。
MFCは使ってないけど、その辺はWindowsの仕様として考えていいのかな・・・。
取りあえず暫定的にアクティブ化させるようにしてみます。
グローバル変数でメインウィンドウのハンドルは取得済みなので。

dairygoods 2005/06/20(月) 10:02:10
一般論ですと、子ウィンドウが閉じるときに親ウィンドウが
enableでない場合、フォーカスが別のアプリケーションに
移ってしまいます。

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