Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

「MultiTouch」のズーム機能で、高DPIに最適なWindowsフォームアプリケーションを作成する

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/12/06 14:51

 モバイルデバイスの画面はますます高解像度になり、大画面化も進んでいます。それと同時に、フルHD解像度であれば8インチモデルなども登場してきました。つまり、必然的に高DPI化してきています。その結果、マルチ解像度対応が考慮されていないアプリではコンテンツの大きさが相対的に小さくなってしまい、文字が小さくて目が疲れるなど健康面での影響すら生じてしまいます。今回は、「Multitouch for Windows Form 1.0J」を使って、Windowsフォームでの高DPI化対応にスポットあて、対応の前後でどれくらい見やすさか違うかを検証してみたいと思います。

目次

高DPI未対応だとこうなる

 (※サンプルファイルの「CZ1311Fix」に対応)

 高DPIになると、どのような変化が起こるか確認してみましょう。

 Windowsフォームで、640x480サイズのウィンドウを持ったサンプルアプリ(CZ1311Fix)を作成します。

図1 固定ウィンドウサイズサンプル
図1 固定ウィンドウサイズサンプル

 このアプリを1366x768の解像度と1920x1080の解像度の同一サイズのタブレットで表示してみると、次のようになります。

図2 高DPI未対応の実行例
図2 高DPI未対応の実行例

 物理的サイズが同一で解像度が上がるため、640x480のウィンドウ物理サイズは小さくなってしまいます。

ウィンドウサイズ調整対応だとこうなる

 (※サンプルファイルの「CZ1311Wide」に対応)

 それではウィンドウサイズが同じ見た目になるように、スクリーンサイズを取得して1366x768からの倍率を求めてウィンドウサイズを自動変更してみましょう。

リスト1 MainForm.vb
Public Class MainForm
    Private Const BaseWidth As Integer = 1366
    Private Const BaseHeight As Integer = 768

    Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Width = Me.Width * My.Computer.Screen.Bounds.Width / BaseWidth
        Me.Height = Me.Height * My.Computer.Screen.Bounds.Height / BaseHeight
    End Sub
End Class

 Windowsフォームがロードされた時に、比率を求めてウィンドウサイズを変更します。このコードを実行すると、次のようにウィンドウサイズだけは同一になりますが、中のコントロールや文字の大きさは変わりません。

図3 ウィンドウサイズ調整対応の実行例
図3 ウィンドウサイズ調整対応の実行例

 コントロールや文字サイズも対応するためには、求めた倍率を使ってフォーム内のすべての要素について処理を行わなければなりません。サンプルでは3個のコントロールのみでしたが多数のコントロールを使った画面ではかなりの手間となるでしょう。


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

著者プロフィール

  • 初音玲(ハツネアキラ)

     国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。  個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。  Microsoft MVP for Windows Development...

バックナンバー

連載:現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(MultiTouch)
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5