VC,高DPI支持 & c++ 获取屏幕显示比例

/

如今显示器的分辨率是越来越大,2K,4K分辨率的都很常见了。在高分屏下,我们必须对DPI进行缩放,要不显示字体会很小。一般系统默认DPI缩放级别为100%。如果改成150%,200%或者其他,我们会发现部分程序界面显示错乱,这是因为这些程序没有对高DPI进行处理。在VS中编写程序时可以很容易的做到支持DPI。

第一种方法是修改程序的Mainfest,如下图,我用的是VS2015,在属性页的Mainfest Tool中进行修改。
如何让MFC或其他VS编译的程序支持高DPI - 第1张  | Jianchihu

第二种方法是使用SetProcessDpiAwareness函数:

传入的参数有三个取值选择:

对应前面VS设置中的三个选项,具体使用可以参考SetProcessDpiAwareness function


//

屏幕默认的显示比例是100%,但是有些用户喜欢调到“中等”或“较大”,这样的话,就可能导致我们开发的应用超出屏幕边界。因此,我们要获取屏幕显示比例,做出相应的处理。

Primary display DPI scale factor

Similarly, you can get the pixel density by using the LOGPIXELSX and LOGPIXELSY indices:

syntax
[cpp]   view plain  copy
  1. // Get desktop dc  
  2. desktopDc = GetDC(NULL);  
  3. // Get native resolution  
  4. horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);  
  5. verticalDPI = GetDeviceCaps(desktopDc,LOGPIXELSY);  

These results are returned in a coordinate system in which 96 corresponds to 100%, as shown inTable 2 DPI Scale Factors.


参考链接:https://docs.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/dpi-related-apis-and-registry-settings

版权声



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值