Так же, как @Deukalion, я случайно поместил желаемый размер клиентской области в вызов ::CreateWindow()
, и, рисовая сетку, я оказался не в пикселях. Я применил тот же подход к исследованию размера пикселя скриншота моего приложения. Я мог понять, что границы окна и заголовок отбирают какую-то комнату из клиентской области, но разочарование заключается в том, что в Windows 10 даже не имеет общего размера окна приложения!
Я подозреваю, что ::CreateWindow()
вычисляет меньшую клиентскую область путем вычитания жестко заданного количества пикселей по ширине и высоте, а затем создает границу окна и строку заголовка вокруг этого. Это жестко запрограммированное число больше не подходит для ультратонкой темы для Windows. Это смешно - на экране размером с ::CreateWindow()
!
действительно нет ничего
Я следовал совету @PeterRuderman, чтобы использовать вызов ::AdjustWindowRect()
:
RECT rect;
rect.left = rect.top = 0;
rect.right = clientWidth;
rect.bottom = clientHeight;
::AdjustWindowRect(&rect, wflags, false);
HWND hWindow = ::CreateWindow(wcName, title, wflags, 0, 0,
rect.right - rect.left, rect.bottom - rect.top, 0, 0, hInstance, 0);
right
и bottom
как вне предполагаемого прямоугольника. ::AdjustWindowRect()
оставил исходные координаты (0,0) неповрежденными, так что right
и bottom
могут быть непосредственно заполнены в вызов ::CreateWindow()
. Но, к моему удивлению, поля left
и bottom
стали отрицательными.