none
ウィンドウのフレーム

    質問

  • Visual C++ 2010 で SetWindowLongPtr に WS_THICKFRAME を指定しない場合、
    ウィンドウのフレームが細くなっていて、逆に指定するとフレームが太くなっていました。

    しかし、Visual C++ 2012 や 2015 や 2017 で同じように使ってみたら、
    WS_THICKFRAME を指定していない時もフレームが太くなってしまいました。
    API のフレームのスタイルが変わってしまったのでしょうか?
    可能なら 2010 の時のような細いフレームが使いたいのです。


    それと Windows 7 環境下において、GetSystemMetrics で取得した値が
    下記のようになりました。2012 以降ではフレームが太いハズなのに、
    実際よりも小さな値を返してきました。
    ここら辺も使い方が変更されたのでしょうか?
    お教え頂ければ幸いです。

    Visual C++ 2010
    GetSystemMetrics(SM_CXFRAME) = 8
    GetSystemMetrics(SM_CXDLGFRAME) = 3

    Visual C++ 2012
    GetSystemMetrics(SM_CXFRAME) = 4
    GetSystemMetrics(SM_CXDLGFRAME) = 3

    • 編集済み あか 2017年4月7日 11:00
    2017年4月7日 10:56

回答

  • https://connect.microsoft.com/VisualStudio/feedback/details/753224/regression-getsystemmetrics-delivers-different-values

    上記のURLで報告が上がっているようです。

    サブシステムのバージョンを 5.01 に指定することで、Visual C++ 2012 以降でも、Visual C++ 2010 と挙動を合わせることが出来るようです。

    サブシステムのバージョンを指定する方法は、プロジェクトのプロパティ画面を開き、「構成プロパティ」→「リンカー」→「システム」→「最低限必要なバージョン」に「5.01」と入力します。

    • 編集済み kenjinoteMVP 2017年4月7日 15:46
    • 回答としてマーク あか 2017年4月7日 21:52
    • 回答としてマークされていない あか 2017年4月7日 21:53
    • 回答としてマーク あか 2017年4月7日 21:53
    • 回答としてマークされていない あか 2017年4月7日 21:53
    • 回答としてマーク あか 2017年4月7日 21:54
    2017年4月7日 15:45

すべての返信