システムモーダル – プログラミング – Home

通知
すべてクリア

[解決済] システムモーダル


HB
 HB
(@HB)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

初めて書き込ませていただきます。

環境は
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
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

> (モーダル表示のままになってしまいます。)

具体的にはどのような状態を指しているのでしょう。
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
 HB
(@HB)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

仕様的には、
①ある画面をtopmostにします(背景のウインドウは触れた方が良いのです。だが背景にあった
ウインドウへフォーカスがうつっても、ある画面はTOPMOSTのままになっています。

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

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

フラグに SWP_NOACTIVATE が必要かもしれません。

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


返信引用
HB
 HB
(@HB)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

フラグに SWP_NOACTIVATEをセットすることで解決しました。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました