1

ターゲットWindowsマシンのフォントDPIサイズを把握し、ターゲットマシンのdpiが開発マシンと同じである場合と同じサイズになるようにアプリのフォントを変更しようとしています。(したがって、ターゲットDPIが大きいということは、開発時よりもフォントを小さくすることを意味します)。

以下の解決策に問題があるかどうか、具体的にはLOGPIXELSX=88が正しいかどうか疑問に思っています。

バックグラウンド

現在のWindows画面解像度に一致するように、フォーム上のすべてのコントロールとフォントのサイズを変更します。ただし、誰かがフォントDPIを高く設定している場合は、それを考慮してフォントを小さくする必要があります(したがって、画面上で適切なサイズになります)。私たちのフォントはすでにかなり大きいです(特に画面解像度でサイズを変更しているため)。より高いDPIからの余分なサイズにより、テキストが大きくなりすぎます。

これまでの私の解決策 私が知る限り、以下のようにGetDeviceCapsを使用してから、CurrentFontDPIを取得し、これを実行すると、次のようになります。(新しい画面解像度によるフォントサイズの変更は無視されます):

NewFontSize = CurrentFontSize *(DevelopmentDPI / CurrentFontDPI)

 Function CurrentFontDPI
  Dim hwnd, hDC, logPix, r As Long
  Dim  LOGPIXELSX=88
  hwnd = GetDesktopWindow()
  hDC = GetDC(hwnd)
  logPix = GetDeviceCaps(hDC,LOGPIXELSX )
  r = ReleaseDC(hwnd, hDC)
  CurrentFontDPI= logPix

終了機能

参考までに、上記のコードは「関連するSOの質問」[1]のより大きなルーチンの一部です。コードの残りの部分を省略しましたが、少なくとも1つのエラーが発生したようです(NewFont = OldFont *(NewDPI- OldDPI)DPIが変更されていない場合、高さゼロのフォントサイズが得られます)

[1]:http ://www.BungalowSoftware.com テスト

4

1 に答える 1

2

これは、 DPI 対応アプリケーションの作成に関するMicrosoftの優れた記事です。(この記事は、関連する質問に投稿されたものとは異なることに注意してください。)

LOGPIXELSX は、Windows システム コールのパラメータです。DPI 値ではありません。

VB6 (IIRC) では、開発時の TwipsPerPixel (X および Y) と実行時の TwipsPerPixel (X および Y) の比率を、スケーリング方法を決定する別の方法として使用できます。DPI 比率と同じですが、組み込みの VB プロパティを利用します。

于 2009-03-14T05:01:20.247 に答える