SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ関西2014】セッションレポート

【デブサミ関西2014】C2セッションレポート
4Kディスプレイの時代ももう間近! 今、求められる高解像度ディスプレイの対応技術

  • このエントリーをはてなブックマークに追加

開発したアプリが長く使える、高解像度ディスプレイへの対応技術

 「マイクロソフトのUIを構築するテクノロジの中でも、高DPIに対応しているものと非対応のモノがある」と田中氏は言う。例えばWindowsフォームは高DPIに非対応で、WPFやMFCは高DPIに対応している。Windowsストアアプリはモニターごとの高DPIに対応している。

UIを構築するテクノロジの高DPIへの対応度合い
UIを構築するテクノロジの高DPIへの対応度合い

 なぜ、高DPI非対応アプリは高解像度ディスプレイだとぼやけてしまうのか。高DPI非対応アプリは96dpiのモニターで表示されることを前提としているからだ。つまり144dpi相当のスケールのモニターで表示させると、DPIスケール機能によって自動的にアプリを拡大してしまうのである。しかも自動的にアプリを拡大する際に、100%の画面でいったん描画して、それを150%に拡大するという方法をとるため、ぼやけるという現象が起こる。

 ではこのような問題を解決するにはどうすればよいのか。

 一つは自動拡大をオフにする方法である。エクスプローラー上で該当するexeファイルを右クリックしてプロパティを選ぶ。互換性のタブを選択し、「高DPI設定では画面のスケーリングを無効にする」にチェックを入れる。そしてOKをクリックし、再度該当のプログラムを起動すると、「小さく表示される」という問題は残るがぼやけることはなくなる。「とはいえこの設定をユーザーにお願いするのは無理がある」と田中氏は次のような方法を紹介した。それはVisual Studioによるマニフェストの追加である。まずDPIの対応レベルを変更したいアプリのプロジェクトをVisual Studio2013で開く。ソリューション エクスプローラーに表示されているプロジェクト名の部分を右クリックして、追加、新しい項目をクリック。アプリケーションマニフェストを選択して、次の文に差し替えて実行すれば、クリアに表示されるようになる。

<assemblyxmlns="urn:schemas-microsoft-com:asm.v1"
        manifestVersion="1.0"
        xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:application>
        <asmv3:windowsSettings
        xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>Per monitor</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>

 このように「アプリケーションマニフェストによって、DPIへの対応具合が定義できる」というわけだ。

 「Per monitor」と記述することで、DPIの変化に対応したアプリだと宣言できる。この部分を「true」にすると、Per monitorに対応していないが、高DPIに対応したアプリだと宣言できる。

 「ただ、この処理はあくまでアプリケーションが高DPIに対応しているか対応していないかをOSに知らせるためのもの」と田中氏は語る。

 では確実に高DPIに対応するにはどうすればよいか。そこで高DPIに対応しているWindowsストアアプリである。WindowsストアアプリではOS側のDPIスケールに対応するため、数種類(スケール100、スケール140、スケール180)の画像データを用意し、ディスプレイのDPIスケールの割合に適した画像を使用する仕組みが組み込まれている。その仕組みによりディスプレイのDPIスケールによって、表示される画像を変えることができるのだ。一方、Windowsフォームの場合は、このような機能は搭載されていない。つまり、Windowsフォームの場合、アプリケーションの中でDPIスケールの割合を取得し、それによって、表示させる画像やフォントの大きさを変えるという処理が必要になるというわけだ。

 またWPFをモニターごとのDPIに対応させるにはどのようにすればよいか。その方法として田中氏が推奨したのが、Viewboxというクラスを使う方法である。Viewboxとは、その中に入っている要素を自動的に拡大縮小するためのコンテンツデコレータを定義するもの。つまりViewboxにより、アプリケーション起動後にDPIが変更したというイベントを取得できれば、DPIが変更したというスケールに合わせてアプリケーションそのものを拡大縮小できるようになるというわけだ。

 最後に田中氏は次のように語り、セッションを締めた。

 「これから高解像度のモニターはどんどん出てくる。ぜひ、今日のセッションを参考に高解像度ディスプレイへの対応を行って欲しい」

お問い合わせ

 日本マイクロソフト株式会社

 〒108-0075 東京都港区港南 2-16-3 品川グランドセントラルタワー

 TEL: 03-4332-5300 (大代表)

 コーポレートサイト

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
【デブサミ関西2014】セッションレポート連載記事一覧
この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8143 2014/10/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング