このMSDNガイドを使用して、アプリケーションをDPIセンシティブにする作業を行っています。スケーリングの手法では、デバイスコンテキストのXおよびY論理ピクセルを使用します。
int _dpiX = 96, _pdiY = 96;
HDC hdc = GetDC(NULL);
if (hdc)
{
_dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
_dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(NULL, hdc);
}
次に、を使用してX座標とY座標をスケーリングできます
int ScaleX(int x) { return MulDiv(x, _dpiX, 96); }
int ScaleY(int y) { return MulDiv(y, _dpiY, 96); }
モニターに対して異なる数値を返す状況はありGetDeviceCaps(hdc, LOGPIXELSX)
ますか。GetDeviceCaps(hdc, LOGPIXELSY)
私が本当に心配している唯一のデバイスはモニターですが、個別ScaleX(int x)
のScaleY(int y)
機能が必要ですか?Scale(int px)
1つの関数だけを使用できますか?これを行うことにはマイナス面がありますか?
助けてくれてありがとう。