2015-03-22 7 views
1

Я вызываю 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.

+1

Несомненно, это потому, что ваша программа не является [dpiAware] (https://msdn.microsoft.com/en-us/library/ms701681%28v=vs.85%29.aspx). Таким образом, ваше окно автоматически получает масштабирование в соответствии с DPI видеоадаптера, возможно, установленным на 150% или выше. –

+0

Спасибо @HansPassant, Это была функция SetProcessDpiAwareness, в которой я нуждался. Для тех, кто прибыл из Google, я добавил SetProcessDpiAwareness (PROCESS_DPI_AWARENESS :: PROCESS_SYSTEM_DPI_AWARE) до моего вызова CreateWindow(). –

ответ

1

Для любого прибывшего из Google, я добавил:

SetProcessDpiAwareness(PROCESS_DPI_AWARENESS::PROCESS_SYSTEM_DPI_AWARE)
перед моим вызовом
CreateWindow()

documentation не упоминает, который Lib связать против, но это должно быть shcore.lib.

 Смежные вопросы

  • Нет связанных вопросов^_^