C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Surfaceでデスクトップアプリの画面がおかしくなる

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■83046 / inTopicNo.1)  Surfaceでデスクトップアプリの画面がおかしくなる
  
□投稿者/ キムキムキムチー (1回)-(2017/03/01(Wed) 13:02:30)

分類:[VB.NET/VB2005 以降] 

こんにちは。

VB2008で作成したソフト(デスクトップアプリ)をユーザに提供していますが、
とあるユーザより、画面が異様に小さくなる、画面やメニューの文字配置が崩れる、
といったご連絡がありました。
その方は、MicrosoftのSurface(どのモデルかは未確認)のWindows10を
お使いでした。

そこで質問なのですが、

・アプリ側ではどのような対策をすればよいでしょうか?
・アプリ側での対策がなされていない場合、例えばユーザ側の設定変更等で
 この表示問題を解決することはできるのでしょうか?

もし参考になるサイトがございましたらご教示頂けると幸いです。
引用返信 編集キー/
■83047 / inTopicNo.2)  Re[1]: Surfaceでデスクトップアプリの画面がおかしくなる
□投稿者/ 魔界の仮面弁士 (1152回)-(2017/03/01(Wed) 14:04:21)
No83046 (キムキムキムチー さん) に返信
> その方は、MicrosoftのSurface(どのモデルかは未確認)のWindows10を
> お使いでした。

高 DPI モニタな機種ですね。

Surface Book   13.5 インチ  3000x2000 ドット
Surface Pro 4  12.3 インチ  2736x1824 ドット
Surface Pro 3  12.0 インチ  2160x1440 ドット
Surface Pro 2  10.6 インチ  1920x1080 ドット


> VB2008で作成したソフト(デスクトップアプリ)をユーザに提供していますが、

WPF アプリケーションでしょうか。
Windwos フォーム アプリケーションでしょうか。
http://d.hatena.ne.jp/hilapon/20160621/1466501984



> VB2008で作成したソフト(デスクトップアプリ)をユーザに提供していますが、
> とあるユーザより、画面が異様に小さくなる、画面やメニューの文字配置が崩れる、
> といったご連絡がありました。

たとえば Surface Book の場合、13.5 インチモニターに対して
3000x2000 ドットという高精細パネルとなっているため、
既定の DPI 設定が 200% になっています。

開発時の DPI 設定はいくつになっていますか?
ディスプレイの設定画面で確認してみて下さい。

100% … 1 インチあたり 96 ピクセル
150% … 1 インチあたり 144 ピクセル
200% … 1 インチあたり 192ピクセル
250% … 1 インチあたり 240ピクセル
300% … 1 インチあたり 288ピクセル


> そこで質問なのですが、
> ・アプリ側ではどのような対策をすればよいでしょうか?
> ・アプリ側での対策がなされていない場合、例えばユーザ側の設定変更等で
>  この表示問題を解決することはできるのでしょうか?
> もし参考になるサイトがございましたらご教示頂けると幸いです。

https://blogs.msdn.microsoft.com/ttanaka/2014/07/16/dpihigh-dpi-1-dpi/
https://blogs.msdn.microsoft.com/ttanaka/2014/07/24/dpihigh-dpi-2-12398/
https://blogs.msdn.microsoft.com/ttanaka/2014/08/22/dpihigh-dpi-3-12503/
引用返信 編集キー/
■83048 / inTopicNo.3)  Re[2]: Surfaceでデスクトップアプリの画面がおかしくなる
□投稿者/ キムキムキムチー (2回)-(2017/03/01(Wed) 14:42:26)
No83047 (魔界の仮面弁士 さん) に返信

ご回答ありがとうございました。

> WPF アプリケーションでしょうか。
> Windwos フォーム アプリケーションでしょうか。
> http://d.hatena.ne.jp/hilapon/20160621/1466501984

Windwos フォーム アプリケーションでした。

https://blogs.msdn.microsoft.com/ttanaka/2014/08/22/dpihigh-dpi-3-12503/

にあるマニフェストでの対応は、VB2008では不可能なのでしょうか?

引用返信 編集キー/
■83058 / inTopicNo.4)  Re[1]: Surfaceでデスクトップアプリの画面がおかしくなる
□投稿者/ Azulean (788回)-(2017/03/01(Wed) 22:44:52)
No83048 (キムキムキムチー さん) に返信
> マニフェストでの対応は、VB2008では不可能なのでしょうか?

できますが、マニフェストに書くだけでいい感じに動くわけではありません。
高 DPI 環境でも問題ないようにレイアウトを調整し、テストする必要があります。
AutoScaleMode などである程度のフォローはされますが、完璧になるわけではないので。


No83046 (キムキムキムチー さん) に返信
> とあるユーザより、画面が異様に小さくなる、画面やメニューの文字配置が崩れる、
> といったご連絡がありました。
> その方は、MicrosoftのSurface(どのモデルかは未確認)のWindows10を
> お使いでした。

マニフェストで宣言していない場合、DPI 仮想化と呼ばれ、ぼやけますが拡大されるという仕組みがあります。
通常はこれで違和感なく操作できるはずですが、これが切れると言うことは、WPF 関連のコンポーネントでも使用しているのですか?
それとも、Windows 10 の Insider Preview を利用していて DPI 周りの動きが変わったという感じですか?
引用返信 編集キー/
■83062 / inTopicNo.5)  Re[2]: Surfaceでデスクトップアプリの画面がおかしくなる
□投稿者/ キムキムキムチー (3回)-(2017/03/02(Thu) 15:43:43)
No83058 (Azulean さん) に返信

ご回答ありがとうございました。
色々と考慮しなければならない点があるのですね。

>>とあるユーザより、画面が異様に小さくなる、画面やメニューの文字配置が崩れる、
>>といったご連絡がありました。
>>その方は、MicrosoftのSurface(どのモデルかは未確認)のWindows10を
>>お使いでした。
>
> マニフェストで宣言していない場合、DPI 仮想化と呼ばれ、ぼやけますが拡大されるという仕組みがあります。
> 通常はこれで違和感なく操作できるはずですが、これが切れると言うことは、WPF 関連のコンポーネントでも使用しているのですか?
> それとも、Windows 10 の Insider Preview を利用していて DPI 周りの動きが変わったという感じですか?

WPF 関連のコンポーネントは使用しておりません。
Windows 10 の Insider Previewについては分かりません(恐らく違うと思います)が
確認したいと思います。
引用返信 編集キー/
■83142 / inTopicNo.6)  Re[3]: Surfaceでデスクトップアプリの画面がおかしくなる
□投稿者/ キムキムキムチー (4回)-(2017/03/08(Wed) 10:14:33)
あれから、高DPIモニタのノートPCを入手し、ディスプレイ設定で
「テキスト、アプリ、その他の項目のサイズを変更する」
で100%を指定した場合は問題ありませんでしたが、
例えば150%のようにすると、該ユーザより指摘のあったような現象を
確認することができました。

そこで、魔界の仮面弁士さまよりご教示頂きました、
以下サイトの[自動拡大をオフにする]の部分を参考に
作成した実行ファイルのプロパティの「互換性」タブで
高DPI設定での画面スケーリングを無効に設定すると、
表示に違和感のある部分は若干見受けられましたが、
少なくとも使用には耐え得るレベルにまで改善しました。

https://blogs.msdn.microsoft.com/ttanaka/2014/07/24/dpihigh-dpi-2-12398/

ただし、今後、各ユーザにこの手順をお願いするわけにもいかず、
何とかアプリ側で対応したいのですが、
上記の実行ファイルのプロパティ設定と同じ効果を
こちらで対応することはできますでしょうか?

もしかしたら、以下のサイトに書いてあるマニフェストというものが
それに当たるのかも知れませんが、

https://blogs.msdn.microsoft.com/ttanaka/2014/08/22/dpihigh-dpi-3-12503/


VB2008で、どのようにマニフェストを作成すればいいのか、
また、どのように実行ファイルに反映すればいいかが分かりません。

アドバイスを頂けると幸いです。
引用返信 編集キー/
■83150 / inTopicNo.7)  Re[4]: Surfaceでデスクトップアプリの画面がおかしくなる
□投稿者/ 魔界の仮面弁士 (1172回)-(2017/03/08(Wed) 15:41:23)
No83142 (キムキムキムチー さん) に返信
> VB2008で、どのようにマニフェストを作成すればいいのか、

ソリューション エクスプローラーの [My Project]を開き、
[アプリケーション]タブの [UAC 設定の表示(U)]を押すと、
app.manifest が表示されますので、そのルート要素<asmv1:assembly>の下位に
下記を書き加えてみて下さい。

<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>


> また、どのように実行ファイルに反映すればいいかが分かりません。

コンパイルした yourAppName.exe を [ファイル(F)]-[開く(O)]-[ファイル(F)...]で開き、
表示されるツリーの RT_MANIFEST\1 のリソースを開くと、EXE に埋め込まれたかどうかを
確認することが出来ます。
引用返信 編集キー/
■83153 / inTopicNo.8)  Re[5]: Surfaceでデスクトップアプリの画面がおかしくなる
□投稿者/ キムキムキムチー (5回)-(2017/03/08(Wed) 17:44:52)
魔界の仮面弁士さま、アドバイスありがとうございました。

ご指示の手順で生成されたapp.manifestを編集し、
ビルドしたら、互換性プロパティ設定時と同じような動作を
確認することができました。
また、exe内のマニフェストも確認できました。

誠にありがとうございました。心より感謝申し上げます。
今後ともどうぞよろしくお願い致します。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ