c++ - Win32 客户端大小和不正确的大小

标签 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);
}

获取客户端大小的代码是:

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/

相关文章:

Php exec() 与 mysql 导入不起作用

forms - TForm.Close 和通过表单句柄关闭有什么区别?

c++ - 设置了 OFN_ALLOWMULTISELECT 标志的 GetOpenFileName()

c++ - 试图理解 valgrind 输出

c++ - 为什么当我选择 >250000 个样本点时,程序不起作用?

c++ - 从现有指针 C++ 创建一个新对象

c++ - WinHttpSetOption() 设置 TLSv1.2 失败,错误代码为 ERROR_INTERNET_INCORRECT_HANDLE_TYPE

c++ - 如何将 int unique_ptr 转换为 void unique_ptr?

c++ - VC++2010 : Show open dialog hangs

c# - FreeLibrary 在使用 GetModuleFileName(x64 平台)后抛出 AccessViolationException?