Cap*_*ard 0 c++ windows winapi
因此,对于一个游戏项目,我正在创建一个游戏窗口(当然),但是我只知道窗口的客户端大小,而不是实际大小。我知道如何计算大小,但是在测试查看客户区域的大小(应该与输入相同)时,得到的结果不正确。
void NewWindow(width, height)
{
// Code setting things up here.
if (!fullscreen) // Convert client size to window size.
{
style = WS_OVERLAPPEDWINDOW;
RECT r = RECT();
r.top = 0;
r.bottom = height;
r.left = 0;
r.right = width;
AdjustWindowRect(&r, WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, FALSE);
w = r.right;
h = r.bottom;
}
hWnd = CreateWindow(CLASS_NAME, title, style, CW_USEDEFAULT, CW_USEDEFAULT, w, h, NULL, NULL, GetModuleHandle(NULL), (LPVOID)NULL);
}
Run Code Online (Sandbox Code Playgroud)
获取客户端大小的代码是:
Size Game::GetClientSize()
{
RECT r = RECT();
GetClientRect(hWnd, &r);
return Size(r.right - r.left, r.bottom - r.top);
}
Run Code Online (Sandbox Code Playgroud)
我不确定问题出在哪里,因为AdjustWindowRect似乎输出的值大于我输入的值...
谢谢菲利普
就是这样; AdjustWindowRect()
膨胀矩形以为您指定的边框和标题栏添加空间;在您的情况下,左侧和顶部的值(可能)变为负值,因此右侧和底部不代表宽度和高度。使用 r.right - r.left 和 r.bottom - r.top 计算宽度和高度,就像在第二个示例函数中所做的那样。
您传递给的样式AdjustWindowRect
应与传递给的样式相同CreateWindow
。否则它们将不匹配。您还需要计算宽度为右-左,高度为下-顶,因为调整后的矩形通常相对于客户区域的原点为负。