2017-10-30 76 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では3840 x 2160にサイズが変更されます。

これは正常ですか?つまり、Windows 8.1で自動的に行われていたWM_GETDPISCALEDSIZEメッセージを受け取ったときに、全画面ウィンドウを同じサイズにする必要がありますか?

EDIT:ウインドウ化されている場合(ウインドウ化されている場合のみ、ウインドウズされている場合はWS_OPOPUPが機能しますが、サイズがモニタと同じでない場合のみ)ウインドウがフルスクリーンの場合、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 - > [ツールフルスクリーン]ボタン。ウィンドウは完全なデスクトップ面をカバーします。 –

関連する問題