Aero が有効になっているせいだと思い、 DwmGetWindowAttribute 関数を用いてウィンドウサイズを修正してみましたが、結果は変わりませんでした。
どのようにすればクライアント領域を思い通りの大きさにできますでしょうか。ご教示いただければ幸いです。
HWND createMyWindow(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0L;
wc.cbWndExtra = 0L;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = ClassName;
wc.hIconSm = NULL;
if (RegisterClassEx(&wc) == 0)
return 0;
RECT deskRect;
int width = APPWINDOW_W + GetSystemMetrics(SM_CXFIXEDFRAME) * 2;
int height = APPWINDOW_H + GetSystemMetrics(SM_CXFIXEDFRAME) * 2 + GetSystemMetrics(SM_CYCAPTION);
GetWindowRect(GetDesktopWindow(), &deskRect);
HWND hWnd = CreateWindowEx(
0,
ClassName,
TEXT("神経衰弱"),
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
deskRect.right / 2 - width / 2,
deskRect.bottom / 2 - height / 2,
width,
height,
NULL,
NULL,
hInst,
NULL
);
// debug
RECT debugsize;
GetClientRect(hWnd, &debugsize);
// ------------
RECT windowsize;
DwmGetWindowAttribute(hWnd, DWMWA_EXTENDED_FRAME_BOUNDS, &windowsize, sizeof(RECT));
// ウィンドウサイズの調整(+= の右辺が0になり、効果なし)
width += (windowsize.right - windowsize.left) - width;
height += (windowsize.bottom - windowsize.top) - height;
SetWindowPos(hWnd, HWND_TOP, deskRect.right / 2 - width / 2, deskRect.bottom / 2 - height / 2, width, height, NULL);
return hWnd;
}