gpt4 book ai didi

c++ - 为什么 GetSystemMetrics() 返回这些值?

转载 作者:可可西里 更新时间:2023-11-01 12:44:32 26 4
gpt4 key购买 nike

我在创 build 定大小的客户区时遇到了一些问题。 AdjustWindowRect() 无法正常工作,所以我决定尝试手动计算窗口的宽度和高度。

这也不起作用,我想知道为什么,所以我检查了我用来考虑边界等的值。

#include <iostream>
#include <Windows.h>

int main(void)
{
std::cout << "GetSystemMetrics(SM_CYEDGE) = " << GetSystemMetrics(SM_CYEDGE) << std::endl;
std::cout << "GetSystemMetrics(SM_CXEDGE) = " << GetSystemMetrics(SM_CXEDGE) << std::endl;
std::cout << "GetSystemMetrics(SM_CYBORDER) = " << GetSystemMetrics(SM_CYBORDER) << std::endl;
std::cout << "GetSystemMetrics(SM_CXBORDER) = " << GetSystemMetrics(SM_CXBORDER) << std::endl;
std::cout << "GetSystemMetrics(SM_CYCAPTION) = " << GetSystemMetrics(SM_CYCAPTION);

std::cin.get();
}

这给了我:

GetSystemMetrics(SM_CYEDGE) = 2
GetSystemMetrics(SM_CXEDGE) = 2
GetSystemMetrics(SM_CYBORDER) = 1
GetSystemMetrics(SM_CXBORDER) = 1
GetSystemMetrics(SM_CYCAPTION) = 22

我很确定我的窗口的边框没有那么薄。我做错了什么?

编辑 1:

最初我的窗口使用 WS_OVERLAPPED 样式。由于 AdjustWindowRect 不允许与它一起使用该样式,因此我构建了我想要的相同类型的窗口:(WS_BORDER | WS_CAPTION | WS_SYSMENU)。这与我在调用 AdjustWindowRect 和 AdjustWindowRectEx 期间使用的样​​式相同(此样式以 NULL 作为扩展样式,因为我不使用任何样式)。这给了我正确的宽度,但高度缺少几个像素。

RECT rect = { 0, 0, 800, 600};

AdjustWindowRectEx( &rect, (WS_BORDER | WS_CAPTION | WS_SYSMENU), FALSE, NULL);

CreateWindowEx( ..., rect.right - rect.left, rect.bottom - rect.top, ...);

这给了我 800 像素宽的客户区,但高度只有 582 像素。

编辑 2:

好奇,我使用了 GetClientRect();它给了我宽度是 800,高度是 600。为什么显示不正确?


看来,当我粉刷整个 window 时,一切都符合标准。原因?我不知道。

也许其他人可以阐明这一点。

最佳答案

第一个问题是您使用了错误的指标。您需要使用 SM_CXSIZEFRAME 来获取可调整大小边框的宽度。

第二个问题是 Windows 不会为您提供正确的值。 Aero 上窗口的宽边框是一个严重的应用程序兼容性问题。 Windows 故意谎报窗口矩形和边框大小。为了让旧程序仍然正常工作,它们在 CreateWindow() 调用中指定了窗口的大小。但这是框架的大小,包括边框。如果没有谎言,窗口最终会出现一个太小的客户区。

要关闭谎言,您必须告诉 Windows 您知道有关 Aero 行为的信息并且不需要被骗。项目 + 属性、链接器、命令行、附加选项框并添加:

/SUBSYSTEM:CONSOLE,6.0

Version 6.0 是 Vista 的版本号,是第一个具有 Aero 的 Windows 版本。请注意,当您执行此操作时,您的程序将无法再在 XP 上运行。

关于c++ - 为什么 GetSystemMetrics() 返回这些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com