Windows 10 Anniversary Updateでは、高DPI環境で文字やGUIパーツを大きく描画する「DPIスケーリング」にも改善が加わっている。MicrosoftはこれまでもDPIスケーリング機能を手直ししてきたが、Anniversary Updateでは「NCAの自動スケーリング」をサポートした。

NCAとは、Non-Client Area=非クライアント領域の略で、タイトルバーやメニューバー、フレームなど開発者が直接タッチしない領域を指す。厳密にはタイトルバーの文字列やメニューバーは開発者が構成を記述しなければならないが、Windowsでは慣例的にクライアント領域ではないと定義されてきた。

このNCAは画素の大きさを表すためのスケール係数の変更に応答せず、高DPI環境でアプリケーションコンテンツは正しく描画されるものの、メニューバーやアイコンが並ぶツールバーといったUIコンポーネントが小さくなる、もしくはぼやけるといった問題がWindows 10 Insider Previewで発生していた。具体例としては、デバイスマネージャーやHyper-Vマネージャーが動作するmmc.exeがそれにあたる。

Windows 10 Anniversary Updateは、この問題を改善するために用意したファンクション「EnableNonClientDpiScaling」で、指定したトップレベルウィンドウのNCAに対して自動スケーリングを有効にしている。

正しくDPIスケーリングが行われているメモ帳と、NCA領域のスケーリングに失敗しているアプリケーション。このような問題が以前は多発していた (以下、公式ブログより抜粋)

もうひとつの改善が、「DPIスケーリング混合モード (Mixed-Mode DPI scaling)」だ。Windows 8.1ではディスプレイごとに異なるDPIへ対応する「Pre-Monitor Aware」を採用していたが、Microsoftはデスクトップアプリが正しくDPIスケーリングを処理し、更新し続けるためには機能不足であったと説明している。

その解決策として、各トップレベルウィンドウごとに異なるDPIスケーリングモードを指定可能にするファンクション「SetThreadDpiAwarenessContext」を用意。値をセットすることで異なるDPIスケーリングを実現するというものである。

言葉で説明するとわかりにくいが、下図を見れば一目瞭然だ。アクティブウィンドウとなる印刷ダイアログは、<General> タブなどに文字の荒さが目立つものの、非アクティブウィンドウの「メモ帳」はメインウィンドウの文字列だけでなく、GUIコンポーネントの文字列もくっきりと表示されている。

ウィンドウやダイアログを拡大した状態。印刷ダイアログがアクティブな状態でもメインコンテンツ部分はぼやけているが、「メモ帳」のGUIコンポーネントはハッキリしている

Windows 10がこれらの機能をサポートすることで、Microsoft Officeや.NET Framework 3.0から使用可能になったWPF (Windows Presentation Framework) を使ったデスクトップアプリの改善が大きく期待できる。だが、Windows Formsを利用した古いデスクトップアプリなどは期待薄。MicrosoftはUWP (ユニバーサルWindowsプラットフォーム) アプリケーションに注力しているため、人的資源を割り当てるつもりがないのだろう。

Microsoft Developer Platform GroupシニアプログラムマネージャーのPeter Felts氏は今回の改善について、DPIスケーリング処理を改善し、容易なアプリケーション開発を可能にすることが、Windows 10 Anniversary Updateのゴールだったと説明している。

ようやく高DPI環境の改善が一つ加わったという見方もある。あまりにも小さい改善だが、4Kディスプレイが普及してきた今、その効果は大きい。UXが大きく変化する新機能も楽しみだが、日々触れるWindowsだからこそ、Microsoftには今回のように小さな改善を続けてほしい。

阿久津良和(Cactus)