- 締切済み
モードレスダイアログ
お世話になっております。 VC2005を使用しております。 メインウィンドウの他にモードレスダイアログを常時表示させたいと 考えております。 ダイアログのプロパティのTopmostをTrueにすると常時手前に表示されるのですが、メインウィンドウを最小化したり、他のプログラムを起動した時も常に前面に表示されてしまいます。 メインウィンドウと同じように動作するにはどうすればよいのでしょうか?教えてください。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >メインウィンドウを最小化したり、 ↑ WM_SIZE メッセージを処理してアイコン化(SIZE_MINIMIZED)になるときに Topmost 属性を解除します。また、元(SIZE_RESTORED)のサイズに戻るときには Topmost 属性を設定するようにします。 http://www.winapi-database.com/Message/WM/WM_SIZE.html >他のプログラムを起動した時も常に前面に表示されてしまいます。 ↑ WM_ACTIVATE メッセージを処理して非アクティブになるときに Topmost 属性を解除します。アクティブになったときは Topmost 属性を設定するようにします。 http://www.winapi-database.com/Message/WM/WM_ACTIVATE.html http://www.winapi-database.com/Message/WM/WM_MOUSEACTIVATE.html ・あと動的に Topmost 属性を解除、設定するには (1)GetWindowLong() 関数で拡張ウインドウ・スタイル(GWL_EXSTYLE)を取得 (2)取得した拡張ウインドウ・スタイルから Topmost 属性(WS_EX_TOPMOST)をリセット (3)SetWindowLong() 関数で拡張ウインドウ・スタイル(GWL_EXSTYLE)を設定 (4)SetWindowPos() 関数で SWP_FRAMECHANGED を指定して反映させる の手順で行います。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getwindowlong.asp http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_setwindowlong.asp http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_setwindowpos.asp ・以上。
お礼
いつもお世話になっております。 親切なご回答ありがとうございます。 確認させていただきます。 今後ともよろしくお願いします。