• 締切済み

モードレスダイアログ

お世話になっております。 VC2005を使用しております。 メインウィンドウの他にモードレスダイアログを常時表示させたいと 考えております。 ダイアログのプロパティのTopmostをTrueにすると常時手前に表示されるのですが、メインウィンドウを最小化したり、他のプログラムを起動した時も常に前面に表示されてしまいます。 メインウィンドウと同じように動作するにはどうすればよいのでしょうか?教えてください。 よろしくお願いします。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス >メインウィンドウを最小化したり、  ↑  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 ・以上。

cappcino
質問者

お礼

いつもお世話になっております。 親切なご回答ありがとうございます。 確認させていただきます。 今後ともよろしくお願いします。