初めて書き込ませていただきます。
環境は
Win2000 VC++ 6.0
です。
システムモーダル表示したウインドウを、ボタンを押すなどした時にそのウインドウを最下位面
に持っていきたいのですがうまく行きません。
(モーダル表示のままになってしまいます。)
下にソースを表示させていただきます。
//システムモーダル表示
pWnd = this->FindWindow( NULL, (LPCTSTR)csWinName );
pWnd->SetWindowPos( &wndTopMost,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE |
SWP_SHOWWINDOW );
// システムモーダルキャンセル
pWnd->SetWindowPos( &wndBottom, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
↑これが、意図に沿うように動作しません
ご指導のほど、よろしくお願いします。
> (モーダル表示のままになってしまいます。)
具体的にはどのような状態を指しているのでしょう。
Windows 3.1じゃないので,根本的にシステムモーダルなウィンドウは存在しません。
DialogのフラグにDS_SYSMODALというものがありますが,
これは単にWM_EX_TOPMOSTフラグを追加するだけだとヘルプに記述されています。
> pWnd->SetWindowPos( &wndTopMost,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE |
SWP_SHOWWINDOW );
これはシステムモーダルにしているのではなく,単に「topmost」ウィンドウにしているだけです。
#WM_EX_TOPMOSTフラグの操作のみ。
この状態でも背面のウィンドウに触ることができます。
仕様的には、
①ある画面をtopmostにします(背景のウインドウは触れた方が良いのです。だが背景にあった
ウインドウへフォーカスがうつっても、ある画面はTOPMOSTのままになっています。
②あるイベント時発生時に、そのTOPMOSTであった画面を最下面にしたいのです。
TOPMOSTからBOTTOMするには、どうすればよいのでしょうか?
フラグに SWP_NOACTIVATE が必要かもしれません。
これが駄目でも、SetWindowPosには他にもたくさんのフラグを
指定できますので、試してみてください。
フラグに SWP_NOACTIVATEをセットすることで解決しました。
ありがとうございました。