ウィンドウのアクティブ状態の制御について

[戻る]
ワイアード 2007/07/18(水) 09:52:43
いつもお世話になっております。

開発環境:VC++6.0(MFC使用)、WinXP

メインフレームにてダイアログリソースを持つAPのアクティブ状態の制御が
うまくいかないので、ご助言をお願いします。

メインフレームから呼び出されるダイアログはPostMessageにより、起動依頼を
受け、親ウィンドウを指定して起動します。起動時にメインフレームにより
ダイアログのインスタンス管理を行っています。
ダイアログ破棄時は再度PostMessageにて破棄依頼をメインフレームへ送信し、
インスタンスの破棄を行っています。

複数のAPから同じダイアログを起動した場合、一方のAPにてダイアログを閉じると
その呼び出し元APがアクティブになってほしいのですが、もう一方のダイアログが
アクティブとなってしまいます。

SetForegroundWindowを使用する事により、一瞬切り替わった後に呼び出し元を
アクティブとする事はできるのですが、できれば切り替わりなくダイアログ終了時に
呼び出し元をアクティブとしたいと思っています。

Zオーダーが絡んでいるのかと思い、ダイアログ起動時に呼び出し元をSetWindowPosの
第二引数にHWND_TOPを指定したり、メインフレームをHWND_BOTTOMに指定したりした
のですが、現象は変わりませんでした。

また、AttachThreadInputにより、インプット状態を共有する方法も試しましたが、
現象は変わりませんでした。

リソースがメインフレームにあることから、メインフレームへのコールバックが
返ってきたときにメインフレームから起動しているダイアログがアクティブになって
いる事が原因と考えられますが、回避策等はありませんでしょうか?

n_n 2007/07/21(土) 22:56:40
的外れなことをいっていたらすいません。
ダイアログボックスを呼び出す際、
DialogBox(hInst,"Template",hWnd,(DLGPROC)DlgProc);
の様にすると思うのですが、
第3引数をNULLにすると、
>その呼び出し元APがアクティブになってほしいのですが、もう一方のダイアログが
>アクティブとなってしまいます。
の様になることを、Dev-C++で確認しました。第3引数がNULLになってないでしょうか?
もし違っていたらすいません。

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