Итак, для игрового проекта я создаю игровое окно (конечно), но я знаю только размер клиента, а не фактический размер. Я знаю, как рассчитать размер, но я получаю неправильные результаты, когда я тестирую, чтобы увидеть размер клиентской области (должен быть таким же, как и вход).Размер клиента Win32 и неправильный размер
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', как и у старых, имеет ряд ошибок, например. неверные результаты для окна с линией меню. И ошибки в Windows имеют тенденцию сохраняться. Они становятся частью обратной совместимости. –