• 締切済み

OSに依存せず、適切なウィンドウサイズで表示するには

質問させて頂きます Vista(Aero有効)で開発を行っているアプリがあります アプリにはステータスバーを表示しており、そのアプリをXPで動かすと ウィンドウサイズが異なるのか、クライアント領域とステータスバーの境目が若干黒くなります 色々と検証した結果、Vistaではステータスバーの下に表示されるボーダーが XP(クラシック)では表示されないため、その分のボーダーサイズ(高さ4)が余計なサイズとして ウィンドウを表示していたのが原因のようです ウィンドウを表示する際、AdjustWindowRectで適切なサイズを取得しているにも関わらず このような自体が発生しました 本来なら、AdjustWindowRectでVista/XPのボーダーサイズは考慮されるのでは無いでしょうか? AdjustWindowRectには、WS_SYSMENU | WS_CAPTIONを渡しています(実際はGetWindowLongでGWL_STYLEを渡してます) GetSystemMetricsで、ボーダーサイズを引いても、XPではまだ余計なサイズが指定されます このような場合、OSによって内部で切り替えて、XPなら高さ-4等とするべきでしょうか? なるべく、どの環境でも問題なく表示させたいと思っております スマートな解決方法等ありましたら、どうぞご教授の程よろしくお願いします。

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

クライアント領域の高さを同じにしたらステータスバーの高さの違いだけ残りの部分の高さが違うということでしょうか GetWindowRect(hSBWnd, &bar); //hSBWnd ステータスバーのウィンドウハンドル、bar RECT構造体 でステータスバーの高さを取得してクライアント領域の高さを決めたらどうでしょう

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

クライアント領域とステータスバーの境目と書かれていますがそもそもステータスバーはクライアント領域に表示されるので境目とかはないのでは

  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.1

関連するQ&A

  • WindowsAPIの、ウインドウの表示非表示

    WindowsAPIのCreateWindowEx関数で作った 例えば第一引数が WS_EX_TOOLWINDOW|WS_EX_TOPMOST で第四引数が WS_SYSMENU | WS_VSCROLL | WS_SIZEBOX のウインドウを、何かのアクションがあったときいったん非表示にしてから、また何かのアクションがあった時に表示させるには、どのような物を使うのがベストなのでしょうか? プロシージャ内(HWNDはhw)で一例として(…?)試しに以下だけのものでやってみると long lStyle = GetWindowLong(hw, GWL_STYLE); lStyle = ~WS_VISIBLE; SetWindowLong(hw, GWL_STYLE, lStyle); 確かに非表示扱いにはなるようなのですが、これだけではスクリーンは再描画されず、再描画されるには人為的に別ウインドウを移動したりしないといけません。 おそらく「何かによって再描画させられれば」出来ると思うのですが それはどうすれば実現できるのでしょうか? また、これより もっと「こっちの方がいい」といった方法はありますでしょうか?

  • ダイアログボックスで指定したサイズどおり表示されない

    ダイアログボックスで指定したサイズがメイン上では約2倍の大きさになって表示されてしまい、困っています。 メニューリソースは以下のとおりです。 MYDLG DIALOG DISCARDABLE 25, 50, 100, 150 STYLE WS_VISIBLE | WS_CHILD | DS_CONTROL CAPTION "Dialog" FONT 9, "MS Pゴシック" BEGIN END WndProc内にダイアログを貼り付けています。 if(hDlgWnd) break; hDlgWnd = CreateDialog((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),"MYDLG",hWnd,DialogProc); それが実際にウィンドウを開くとダイアログがだいたいですが(50,115,200,340)のように表示されてしまいます。 VC++ Ver.6.0です。コンパイラ等の問題でしょうか。 ご存知の方、宜しくお願いします。

  • ウィンドウスタイルの変更

    現象を文章で書きます。 まず始めに、ウィンドウスタイルにWS_BORDER | WS_CHILD | WS_VISIBLE | WS_THICKFRAME(サイズ変更境界を持つウィンドウ)を設定したボタンを作りました。 それを後の処理で style = GetWindowLongPtr(hWnd,GWL_STYLE); //ウィンドウスタイルの取得 style ^= WS_THICKFRAME; //style XOR WS_THICKFRAMESetWindowLongPtr(hWnd,GWL_STYLE,style); //新しいウィンドウスタイルを設定 としたらボタンのサイズ変更は出来なくなるのですが、 サイズ変更境界が表示されたままになります。 その状態でウィンドウを最小化、元に戻すとするとサイズ変更境界だけ消えたような変な形のボタンになります。 これがどうしてもいやなのです。 原因もわかりません。 対処法を教えてもらえないでしょうか? 環境はBorlandです。

  • ウィンドウのサイズ変更について

    タイトルバーがないウィンドウのサイズ変更について質問です。 タイトルバーがあるウィンドウでは、 ウィンドウの端にマウスカーソルを合わせると サイズ変更のカーソルに変わってサイズ変更が出来ますけど、 タイトルバーがないウィンドウでは出来ないのですが、 どうすればサイズ変更が出来るようになるのでしょうか? CreateWindowEx()には、 拡張ウィンドウスタイルには、 WS_EX_TOOLWINDOW | WS_EX_LAYERED | WS_EX_ACCEPTFILES ウィンドウスタイルには、 WS_POPUPWINDOW | WS_BORDER を渡しています。 開発環境 XP Visual Studio 2005 C、C++

  • ウインドウの移動禁止

    最大化したウインドウをタイトルバーでドラッグして移動させるのを禁止したいのですが、うまくいきません!どなたかご教授下さい。 現在 1.OnInitDialog()内  ・ウインドウを最大化   this->ShowWindow(SW_SHOWMAXIMIZED);  ・最大化,最小化ボタン消去、サイズ変更禁止   lStyle = GetWindowLong( this->m_hWnd, GWL_STYLE );   lStyle &= ~WS_MINIMIZEBOX;   lStyle &= ~WS_MAXIMIZEBOX;   lStyle &= ~WS_SIZEBOX;   SetWindowLong( this->m_hWnd, GWL_STYLE, lStyle ); 2.WindowProc()内  ・タイトルバーでのダブルクリックを無視   if( message == WM_NCLBUTTONDBLCLK ){     return TRUE;   } しかし、ウインドウをタイトルバーでドラッグして移動を禁止する事が出来ません。 何か方法は無いのでしょうか? 環境 WindowsXP Pro SP3 VC++6.0 SP6 以上、よろしくお願いします。

  • ダイアログ内の文字列取得

    開発環境  Xp Home Edtion Microsoft Visual C++ 2008 Express Edition ダイアログのテキストボックスに入力された文字列を取得し、それをデバッグに表示するプログラムを作ろうとしています。 ですが、デバッグに表示されないのです。どのようにしたら良いでしょうか? リソースファイル IDM_SETTING DIALOG DISCARDABLE 0, 0, 154, 115 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU FONT 16 , "MS Shell Dlg" STYLE WS_CAPTION | WS_BORDER | WS_SYSMENU CAPTION "設定画面" BEGIN EDITTEXT IDC_XS,35,15,40,14,ES_AUTOHSCROLL PUSHBUTTON "OK", IDOK,10,0,50,14,WS_GROUP END cppファイル HWND hnd; LPTSTR Lptdtr10; LPCSTR dsLPCSTR10; Lptdtr10 = (char*)malloc(32768); GetDlgItemText(hnd, IDC_XS , Lptdtr10, sizeof(Lptdtr10)); dsLPCSTR10 = (LPCSTR) Lptdtr10; char *ree; ree=(char*)dsLPCSTR10; String^ data=gcnew String(ree); System::Diagnostics::Debug::WriteLine(data); //ここで表示する

  • ウィンドウのサイズ変更について

    ウィンドウのサイズ変更について質問です。 ウィンドウをサイズ変更する際に、マウスで指定数動いた時だけ サイズ変更するようにしたいのですが、何か方法はあるのでしょうか? ちなみに、 拡張ウィンドウスタイルは、 WS_EX_TOOLWINDOW | WS_EX_LAYERED | WS_EX_ACCEPTFILES ウィンドウスタイルは、 WS_POPUPWINDOW | WS_CLIPCHILDREN です。 「WS_THICKFRAME」を使用してやろうとしたのですが出来ませんでした。 何か方法があるのかもしれませんが。 開発環境 XP Visual Studio 2005 C、C++でWindowsAPIを使用しています。

  • ファイルサイズを表示させたい

    Windows7を利用しています。 何をいじくったのか覚えていないのですが、ファイルをクリックした際に、ウィンドウ下部のステータスバーに「1個選択」としか文字がでず、ファイルのサイズなどが表示されません。 どうすれば、再度ファイルサイズを表示させられるのでしょうか? ご存じのかた、教えていただければ幸いです。

  • EDIT 作成時のちらつき防止について

    Enterキーを押下された時に画面にEDITBOXを表示し、 再度Enterキーを押下されたらEDITBOXを消す。 という処理を行っているのですが、表示する時も消す時も画面のちらつきが発生します。 このちらつきを防ぐにはどうしたらいいでしょうか? Enterキーが押されたときに、毎回、CreateWindowし、SetWindowLongでWNDPROCを設定しています。 mainWndProc関数の一部 mHwEnter = CreateWindow("EDIT", "ここに入力", WS_CHILD | WS_VISIBLE | WS_BORDER, 173, 380, 12 * 16, 16, mHwMain, NULL, hInst, NULL); mainWndProc = (WNDPROC)GetWindowLong(mHwEnter, GWL_WNDPROC); SetWindowLong(mHwEnter, GWL_WNDPROC, (LONG)WndProcEnter); 再度Enterキーが押されたとき ウインドウを破棄しています。 WndProcEnter関数の一部 SetWindowLong (mHwEnter, GWL_WNDPROC, (LONG)mainWndProc); DestroyWindow (mHwEnter); mHwEnter = NULL; EDITの表示、消去の仕方はWebで調べたのですが、間違っていたらご指摘お願いします。 また、メイン(親)画面は20FPSくらいで描画し続けています。MFCやDirectXは使用していません。 ちらつき防止のわかる方がいたら回答お願いします。

  • エディット スタイル リソースファイル

    開発環境: vista visual studio2010 メモ帳を用いて、リソースファイルを作っています。 ダイアログを、作成して、その中にエディットを表示させています。 このエディットのスタイルを、このようにしたいです。  (1) 書き込みが出来ないようにする                  →OK  (2) 外枠などを外す                           →OK  (3) 枠をオーバーする場合は、改行せず横にスクロールさせる →出来ない という状況です。 イメージ図も添付しておきます。 なぜ(3)が出来ないのか分かりません。(2)の動作をなくすと、出来るようになるのですが。 #include <windows.h> #include <commctrl.h> #include <richedit.h> #include "resource.h" LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN IDD_LOADING DIALOG 0, 0, 188, 169 STYLE    DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT |    WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU CAPTION "Dialog" FONT 10, "HGS創英角ゴシックUB" { EDITTEXT IDDE_NAME, 14, 16, 72, 19, ES_READONLY | ES_AUTOHSCROLL ~WS_BORDER }

専門家に質問してみよう