WinAPI: Create a window with a specified client area size

GeReV picture GeReV · Jan 30, 2011 · Viewed 22.6k times · Source

I was wondering how can I create a window using Win32 API with a specific client area size.

When trying to create a window using the following piece of code, the entire window is 640x480, with the window's chrome taking some of the client area:

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);

Assuming simple math won't quite solve the problem, how do I take the chrome size into account?

Answer

Ferruccio picture Ferruccio · Jan 30, 2011

You can use the AdjustWindowRect or AdjustWindowRectEx function to calculate the window size given a desired client area size.