【问题标题】:How to create a window based on only the size of the screen not including the windows border with C++/Windows?如何仅基于屏幕大小创建窗口,不包括 C++/Windows 的窗口边框?
【发布时间】:2011-01-22 03:44:04
【问题描述】:

当使用CreateWindow(...)创建一个需要窗口宽度和高度的窗口时,我必须输入值656和516,而不是640和480,以考虑窗口边框。

我想知道是否有一种方法可以仅基于不包括边框的窗口部分来创建窗口,特别是考虑到如果不同版本的窗口具有不同大小的边框,那么程序可能会以不同的方式显示我在所说的不同版本上运行它

(即:使用 640 - 如果用户版本的窗口具有不同大小的边框,则 object.width 会将对象不完全放在屏幕边缘)。

那么有没有一种方法可以仅基于与程序相关的屏幕部分创建一个窗口,或者至少根据GetVericalBorder()/GetHorizontalBorder() 的行中的函数来创建一个窗口,以便我在@ 中使用这些987654324@ 的参数而不是像 656 和 516 这样的任意和模糊的值?

【问题讨论】:

    标签: c++ windows border createwindow


    【解决方案1】:

    看看AdjustWindowRectEx。您向此函数传递一个矩形,其中包含所需的窗口客户区大小和窗口样式标志,它会计算使整个窗口有多大,以使客户区达到所需的大小。

    【讨论】:

    • 请注意,CreateWindow 函数可以插入额外的窗口标志,而 AdjustWindowRectEx 不会这样做。因此,如果您没有得到正确的结果,请尝试使用标志来查找您错过了哪个(或者只是询问创建的窗口它的标志是什么)。
    • 这会改变窗口本身,还是只给我一个矩形,我可以在 CreateWindow(...) 中使用它的尺寸?
    • 它只是给你一个矩形。实际调整窗口大小取决于您。
    【解决方案2】:

    您可以使用 SystemParametersInfo() API 来获取此类窗口信息。请参阅 SPI_GETBORDER 和/或 SPI_GETNONCLIENTMETRICS 参数refer Microsoft Library

    SystemParametersInfo 应该允许您考虑边框、菜单等。

    【讨论】:

      【解决方案3】:
      int WINAPI GetSystemMetrics(
        __in  int nIndex
      );
      

      Refer Microsoft Library

      【讨论】:

        猜你喜欢
        • 2014-07-15
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多