web-dev-qa-db-ja.com

WinAPI:指定されたクライアント領域サイズでウィンドウを作成します

特定のクライアント領域サイズで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);

単純な数学では問題が完全に解決されないと仮定した場合、chromeサイズをどのように考慮しますか?

注:ウィンドウの作成後にSDLを使用していますが、ウィンドウサイズにバインドされており、サイズに違いはないと思います。

33
GeReV

AdjustWindowRect または AdjustWindowRectEx 関数を使用して、必要なクライアント領域サイズを指定してウィンドウサイズを計算できます。

33
Ferruccio