DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Createで作成したダイアログのZ順について

環境/言語:[WindowsXP VC++ MFC使用]
分類:[その他]

お世話になります。

基本クラスがCFormViewのSDIのプロジェクトで作成しています。
起動時にCreate()にてダイアログを2つ(今後増える予定)作成し初期表示時は
ShowWindow(SW_HIDE)にて非表示にしておき
CFormViewに貼り付けたボタンを押下することでShowWindow(SW_SHOW)で
表示させています。

メインウインドウとダイアログ2つを同時に表示し、且つすべての画面を
操作する事はできているのですが、問題が一つありまして
アクティブになっているダイアログを最前面にしたいのですが出来ません。

Createの際に
dlg1.Create((UINT)IDD_DLG_GAMEN1);
dlg1.ShowWindow(SW_HIDE);

dlg2.Create((UINT)IDD_DLG_GAMEN2);
dlg2.ShowWindow(SW_HIDE);

とすると、最初にCreate()した画面が前面にきて
dlg2の画面をアクティブにしてもdlg1の画面の前には出てくれません。

親の画面を指定し
dlg1.Create((UINT)IDD_DLG_GAMEN1, this);
dlg1.ShowWindow(SW_HIDE);

dlg2.Create((UINT)IDD_DLG_GAMEN2, this);
dlg2.ShowWindow(SW_HIDE);

とすると親ウインドウをクリックするとdlg1、dlg2共に親ウインドウの
後ろに隠れてしまいます。
thisをメインフレームのハンドルにしても第2引数を省略した時と同じ結果になりました。

ダイアログは常に親ウインドウの前に表示され、アクティブになったダイアログが
ほかのダイアログよりも常に最前面に表示されるようにする為には
どうしたらよろしいでしょうか?
よろしくお願いします。


開発環境
VS2005 VC++ MFCを使用しています。
OS:WindowsXP
ダイアログベースで、ボタンを1つ用意して
モードレスダイアログ用メンバを2つ用意し、INITDIALOGで作成、
ボタンで両方を表示
(destroyでどちらも削除)

したら、どちらかをアクティブにしたときちゃんと前面に出てきましたよ。

もっとシンプルなプロジェクトから実験してみてはどうでしょうか?

(Windows Vista/Visual Studio2005 SP1)
■No25236に返信(Blueさんの記事)
> もっとシンプルなプロジェクトから実験してみてはどうでしょうか?

試しに単純なプロジェクトを作ってやってみたら確かに期待通りの
動きになっていたので調べてみたら、コンストラクタではなく
OnInitialUpdate()内でダイアログを生成してあげれば期待通りの
動きになる事がわかりました。
これで先に進む事ができます、ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板