所以对于一个游戏项目,我正在创建一个游戏窗口(当然),但我只知道窗口的客户端大小而不是实际大小。我知道如何计算大小,但在测试客户区的大小(应与输入的大小相同)时得到的结果不正确。
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);
}
获取客户端大小的代码是:
Size Game::GetClientSize()
{
RECT r = RECT();
GetClientRect(hWnd, &r);
return Size(r.right - r.left, r.bottom - r.top);
}
我不确定问题出在哪里,因为 AdjustWindowRect 输出的值似乎比我输入的值大...
谢谢, 菲利普
最佳答案
传递给 AdjustWindowRect
的样式应该与传递给 CreateWindow
的样式相同。否则它们将不匹配。您还需要将宽度计算为右 - 左,将高度计算为下 - 上,因为调整后的矩形通常相对于客户区域的原点具有负原点。
关于c++ - Win32 客户端大小和不正确的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879021/