スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 更に改良された | トップページ | ブルーライト対策メガネとか »

Per-Monitor DPI対応

今は、Windows用AmuseGraphicsの開発フェーズなのだが、他ソフトの不具合対応も必要なので、中々、先に進まない。次は、Win版Mirror-DTC Ver1.3.1をリリース予定で、既に使いこみ中なのだが、Windows10 Creators Update以降ではPer-Monitor DPI 対応になる。

何度か書いた様に、マトモなPer-Monitor DPI対応になるのはWindows10 Creators Update以降に限られるのだが、その理由は、それより前の環境だと、Per-Monitor DPI対応化は至って困難だからだ。

具体的には、マニフェストにSystem DPI対応である旨を記述しておくと、ダイアログなんかは、メインモニター側のDPIに合わせて描画され、異なるDPIのサブモニターがある場合に、そのモニターにウインドウを移動しても、DPIの違いに合わせた拡大/縮小を自動的に行ってくれるのだが、Per-Monitor対応である旨を記述してしまうと、このDPIの違いに合わせた拡大/縮小が行われない訳だ。

なので、マトモなPer-Monitor DPI対応にしたければ、ダイアログのサイズばかりか、フォントなんかのサイズも変更が必要だし、コンボボックスだとかボタンのイメージ画像についてさえ、自前で変更する必要が出てくる。

このため、実質的に、Windows 10のCreators Updateより前に、Per-Monitor DPI対応が行えたのは、Windowsが提供しているGUI部品なんかを全く使わず、自前ですべてのGUIを描画していたソフトなんかに限られた訳だ。

これに対して、Windows10のCreators Updateでは、新しいPer-Monitor DPI対応である旨の記述をマニフェストを書いておけば、ダイアログなんかのサイズ変更はWindowsが行うように変更された。

なので、この時点で、やっと、Windowsについても、マトモなPer-Monitor DPI対応が可能になった感じなので、作者的にも、今回、Mirror-DTC Ver1.3.1については、Per-Monitor対応にしてみている訳だ。

で、前述の様に、マニフェストに新しいPer-Monitor DPI対応である旨の記述を行っておくと、ダイアログなんかの描画は自動的にモニターのDPIに最適化されるのだが、ダイアログにピクセル座標を使って自前で描画している内容については、自分で何とかする必要がある。

Mirror-DTCの場合、バージョン情報ダイアログのリンク先表示なんかがこれに当たるのだが、その他にも、GetSystemMetricsなんかで得られるGUI関連のサイズについては、Per-Monitor対応されないので、そういう値を参照している場合にも、対応が必要だ。

Mirror-DTCの場合、全画面表示時にマウスカーソルが最上部に来た時にメニューバーを表示しているのだが、この処理ではGetSystemMetricsで得られるメニューバーのサイズを参照しているので、Per-Monitor DPI対応するにあたっては、GetSystemMetricsで得られる値を表示するモニターのDPIに合わせて修正する必要があった。

で、普通のソフトの場合、上記の様なことだけを気にしていればよいのだが、Mirror-DTCサーバーの場合、キャプチャー系の処理が必要になるので、より一層、注意しなければならない処理が増える。

具体的には、モニター毎にDPIが異なる場合、マウスカーソルのサイズについても、モニター毎に変化するのだが、OSにカーソル画像を描画させると、システムモニターでの表示サイズで描画される。

なので、今回、Mirror-DTCサーバーでは、上記のマウスカーソル画像をモニターのDPIに合わせて拡大/縮小する自前ルーチンも追加する必要にせまられた訳だ。

と、いうことで、Per-Monitor DPI対応というのは、Windows10 Creators Updateで、やっと、実現可能な感じにはなったのだが、まだまだ、実際に対応を行うとなると、色々と小細工は必要になるかもしれない。

ちなみに、色々な環境でHiDPI絡みのテストを行っていた所、現行のVer1.3.0サーバーについては、Windows7環境では、HiDPIに未対応として扱われる事が判った。

作者的には、マニフェストにPer-Monitor DPI対応と記述されている筈なので、少なくとも画面キャプチャー系でWindowsに座標変換されてキャプチャーが正しく行えなくなる問題は回避できているつもりだったのだが、そうではなかった訳だ。

その理由は、マニフェストの記述にあって、Ver1.3.0をビルドしたVisual Studio 2013では、Windows7に配慮する記述が出力されていなかった訳だ。

これに対して、Ver1.3.1をビルドするのに使っているVisual Studio 2015では、HiDPI対応について設定は変更していないのだが、Windows7に配慮した記述が出力される様になっている。

なので、次バージョンでは、Windows7環境でも、System DPI対応として、問題なく動作する様になる筈だ。

« 更に改良された | トップページ | ブルーライト対策メガネとか »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/65980897

この記事へのトラックバック一覧です: Per-Monitor DPI対応:

« 更に改良された | トップページ | ブルーライト対策メガネとか »

2018年9月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google