Я вызываю CreateWindowEx (ниже) в Windows 8.1 с размером 1920x1080 (родной res), и получившееся окно намного больше (возможно, в 2 раза больше).CreateWindow на окнах 8, кажется, слишком большое окно
HWND windowHandle;
DWORD style = WS_POPUP;
DWORD exStyle = WS_EX_APPWINDOW;
RECT rect;
SetRect(&rect, left, top, right, bottom);
::AdjustWindowRectEx(&rect, style, false, exStyle);
windowHandle =
::CreateWindowEx(
WS_EX_APPWINDOW,
title, //name of the window class
title, //title
style, //style flags
left, top, right - left, bottom - top,
NULL, //parent window
NULL, //menu
applicationHandle, //handle to application (given at WinMain)
NULL);
В документации я читал, что параметры размера ожидаются в устройствах. Я подозреваю, что это причина проблемы, но я не нахожу документацию о том, как конвертировать или указывать в соответствующих единицах или отключать ее, чтобы я мог указывать в пикселях.
FYI Устройство представляет собой Surface Pro II.
Несомненно, это потому, что ваша программа не является [dpiAware] (https://msdn.microsoft.com/en-us/library/ms701681%28v=vs.85%29.aspx). Таким образом, ваше окно автоматически получает масштабирование в соответствии с DPI видеоадаптера, возможно, установленным на 150% или выше. –
Спасибо @HansPassant, Это была функция SetProcessDpiAwareness, в которой я нуждался. Для тех, кто прибыл из Google, я добавил SetProcessDpiAwareness (PROCESS_DPI_AWARENESS :: PROCESS_SYSTEM_DPI_AWARE) до моего вызова CreateWindow(). –