2017-10-30 18 views
2

Windows 8.1에서 PROCESS_PER_MONITOR_DPI_AWARE, Windows 10 v1703에서 DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 인 응용 프로그램이 있습니다. 내 윈도우는 창 모드 일 때 WS_OVERLAPPEDWINDOW 스타일을 가지며 전체 화면으로 표시 할 때 모니터 크기의 WS_POPUP으로 전환합니다.Windows 10, DPI 확장 및 전체 화면

동일한 모니터에서 DPI를 변경하면 창 모드 창에서 Windows 8.1 및 Windows 10 v1703의 WM_DPICHANGED 메시지에서 올바르게 크기 조정 된 창 크기가 표시됩니다. 그러나 전체 화면으로 표시 할 때 Windows 8.1은 전체 화면 창 크기를 조정하지 않고 (동일한 크기를 유지하지만) Windows 10 v1703은 그대로 유지합니다. 즉, 96 dpi의 2560x1440 전체 화면 창은 144 dpi로 이동하면 Windows 8.1에서 2560x1440으로 유지되지만 Windows 10 v1703에서는 3840x2160으로 크기가 조정됩니다.

일반적으로 Windows 8.1에서 자동으로 수행되는 WM_GETDPISCALEDSIZE 메시지를받을 때 수동으로 수행해야하는 것과 동일한 크기의 전체 화면 창을 유지합니까?

EDIT : 창을 전체 화면 (WS_POPUP 작동하지만 크기가 모니터와 같지 않은 경우에만) 인 경우에만 WM_GETDPISCALEDSIZE 메시지가 전송 된 것처럼 보이지 않습니다. 따라서이 동작을 무시할 수는 없으며 Windows 8.1은 전체 화면 창에 대해 Windows 10 v1703과 다르게 작동합니다.

+0

WS_POPUP 이외의 전체 화면 창을 만들기 위해 어떤 스타일을 설정합니까? –

+0

전체 화면으로 갈 때'WS_POPUP | WS_VISIBLE'을 사용하고, 윈도우로 돌아가서 WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE'. – Rajveer

+0

질문에 모순이있는 것처럼 보입니다 ... Windows 8.1에서 동일한 크기를 유지한다고 말하면 나중에 Windows 8.1에서 자동으로 수행됩니다. – Phil1970

답변

0

이 시도 :

void ShowFullScreen(HWND hwnd) 
{ 
    LONG exStyle = ::GetWindowLong(hwnd, GWL_EXSTYLE); 
    LONG style = ::GetWindowLong(hwnd, GWL_STYLE); 

    ::SetWindowLong(hwnd, GWL_STYLE, 
         (style & ~WS_OVERLAPPEDWINDOW) | WS_POPUPWINDOW); 
    ::SetWindowLong(hwnd, GWL_EXSTYLE, exStyle | WS_EX_TOPMOST); 
    ::ShowWindow(hwnd, SW_SHOWMAXIMIZED); 
} 

그것이 W8.1의 문제를 해결하는 데 도움이됩니까?

+0

게시 해 주셔서 감사합니다. 그러나 Windows 10에서 문제가 해결되지 않습니다.이 방법으로 전체 화면을 표시하면 dpi를 변경할 때 여전히 크기가 조정됩니다. – Rajveer

+0

정확히 내가하는 Sciter (http://sciter.com)에서 문제를 재현 할 수 없습니다. 관련 샘플 {sciter-sdk} /samples/dialogs+windows/test-window.htm -> "전체 화면 도구"버튼. 창은 전체 데스크탑 표면을 덮습니다. –