ターゲット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 テスト