WinAPI:创建一个具有指定客户区大小的窗口

GeR*_*ReV 33 c++ winapi window createwindowex

我想知道如何使用具有特定客户区大小的 Win32 API创建窗口.

当尝试使用以下代码创建窗口时,整个窗口为640x480,窗口的chrome占用了一些客户区域:

HWND       hWnd;
WNDCLASSEX WndClsEx;
ZeroMemory(&WndClsEx, sizeof(WNDCLASSEX));

WndClsEx.cbSize        = sizeof(WNDCLASSEX);
WndClsEx.style         = CS_HREDRAW | CS_VREDRAW;
WndClsEx.lpfnWndProc   = DefWindowProc;
WndClsEx.cbClsExtra    = 0;
WndClsEx.cbWndExtra    = 0;
WndClsEx.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
WndClsEx.hCursor       = LoadCursor(NULL, IDC_ARROW);
WndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClsEx.lpszMenuName  = NULL;
WndClsEx.lpszClassName = TEXT("Title");
WndClsEx.hInstance     = hInstance;
WndClsEx.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&WndClsEx);

hWnd = CreateWindowEx(  NULL,
            TEXT("Title"),
            TEXT("Title"),
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            640,
            480,
            NULL,
            NULL,
            hInstance,
            NULL);
Run Code Online (Sandbox Code Playgroud)

假设简单的数学不能解决问题,我该如何考虑铬尺寸?

注意:我在创建窗口后使用SDL,但我猜它与窗口大小绑定并且与其大小没有区别.

Fer*_*cio 34

您可以使用AdjustWindowRectAdjustWindowRectEx函数计算给定客户区域大小的窗口大小.

  • [相关答案](http://stackoverflow.com/a/13793660/3427520) 为什么 `AdjustWindowRect` 不能与 `WS_OVERLAPPED` 一起使用。 (2认同)