Win32程序获取屏幕的HDPI放大倍数

目前高分辨率的显示器越来越高,我们不得不让程序适配系统的HDPI,

其中需要知道系统当前的缩放倍率。

可以使用一下函数获取:

double GetDeviceDpiFactor()
{
        double dDpi = 1;
		// Get desktop dc
		HDC desktopDc = ::GetDC(NULL);
		// Get native resolution
		float horizontalDPI = ::GetDeviceCaps(desktopDc, LOGPIXELSX);
		float verticalDPI = ::GetDeviceCaps(desktopDc, LOGPIXELSY);

		int dpi = (horizontalDPI + verticalDPI) / 2;
		dDpi = 1 + ((dpi - 96) / 24)*0.25;
		if (dDpi < 1)
		{
			dDpi = 1;
		}
		::ReleaseDC(NULL, desktopDc);

		return dDpi;
}

为了能让程序顺利的通过GetDeviceCaps这个函数得到缩放倍率,我们需要在VS项目的

"properties->manifest tool->input and output"中将"enable dpi awareness" 设置为"yes".

或者是在程序中调用::SetProcessDpiAwareness函数(官方并不推荐这样做,这样会导致一些不可预测的问题).

根据如上的操作进行就能顺利的得到当前桌面的缩放倍率。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值