UI が 96 DPI で設計された WIN32 SW を使用しているため、ユーザーが Windows DPI を 96 から 120 以上に変更すると、UI が正しくなくなります。SW に 96DPI で UI を表示させる API があるかどうかを知りたいです。
3 に答える
Windows Vista以降、DPIのスケーリングは自動的に行われるようになっています。私はそれがどれほどうまく機能するかを知る直接の経験はありませんが、これをオフにする方法を説明するページがあります:
http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx
アプリケーションのappcompatキーを追加することもできます。レジストリ内のこの場所は次のとおりです。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
これはユーザーごとの設定であり、に同じキーがありますHKEY_LOCAL_MACHINE
が、もちろんそれはシステム設定であり、書き込みには昇格された特権が必要になります。次のようなキーを追加します。
"C:\path\to\app.exe"="HIGHDPIAWARE"
プログラムの互換性フラグを有効にし、DPIスケーリングをオフにします。これはVista+用です。
SetProcessDPIAwareもオプションですが、ドキュメントによると、競合状態の危険性があることに注意してください。
アプリを強制的に 96DPI で表示する API はありません。DPI はデバイス設定であり、アプリケーションごとに制御することはできません。
プログラムを変更できる場合は、高 DPI で適切に見えるように UI をスケーリングできます。電話する必要がありますGetDeviceCaps
。LOGPIXELSX
より具体的には、およびで返された数値を使用して、X および Y スケールを計算する必要がありLOGPIXELSY
ます。このようなもの:
HDC hdc;
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX) / 96.0;
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY) / 96.0;