Mar*_*B42 7 windows user-interface dpi
我正在努力使用这个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)功能吗?这样做会有不利之处吗?
在此先感谢您的帮助.
这在理论上是可行的,但我不知道最近使用非方形像素的显示器.方形像素有很多优点,而且现有的软件都采用方形像素,主流显示器似乎不太可能采用非方形像素模式.
在许多情况下,如果你确实有非方形像素监视器,你也许可以应用转换,使其看起来好像它有方形像素(例如,通过设置映射模式).
也就是说,打印机通常使用非方形设备单元.他们中的许多人在一个维度上具有比在另一个维度中更高的分辨率.某些驱动程序使调用者可以使用此解决方案.其他人会让它看起来好像有正方形像素.如果您想重新使用代码进行打印,我建议您不要混淆水平和垂直缩放.
| 归档时间: | 
 | 
| 查看次数: | 3166 次 | 
| 最近记录: |