システムモーダル

[戻る]
HB 2002/11/19(火) 17:04:08
初めて書き込ませていただきます。

環境は
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 );
↑これが、意図に沿うように動作しません

ご指導のほど、よろしくお願いします。

YuO [E-Mail] 2002/11/19(火) 18:31:41
> (モーダル表示のままになってしまいます。)

具体的にはどのような状態を指しているのでしょう。
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フラグの操作のみ。
この状態でも背面のウィンドウに触ることができます。

HB 2002/11/20(水) 09:08:43
仕様的には、
@ある画面をtopmostにします(背景のウインドウは触れた方が良いのです。だが背景にあった
ウインドウへフォーカスがうつっても、ある画面はTOPMOSTのままになっています。

Aあるイベント時発生時に、そのTOPMOSTであった画面を最下面にしたいのです。

TOPMOSTからBOTTOMするには、どうすればよいのでしょうか?

dairygoods 2002/11/20(水) 09:53:49
フラグに SWP_NOACTIVATE が必要かもしれません。

これが駄目でも、SetWindowPosには他にもたくさんのフラグを
指定できますので、試してみてください。

HB 2002/11/20(水) 10:00:36
[[解決]]
フラグに SWP_NOACTIVATEをセットすることで解決しました。

ありがとうございました。

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