Windows程序DPI模式学习

一、DPI简介

DPI的概念
(1)DPI全称为dots per inch,也就是每英寸的点数。在显示器上表示每英寸的像素个数;
(2)Windows上一般默认96dpi作为100%的缩放比例,该值是Windows给我们的参考标准;
(3)Windows上DPI常见取值一般为100%,150%,200%。
视觉上的伸缩
(1)在系统设置高DPI后,我们看到的程序字体会变大。因为当DPI设置高之后,程序在显示器上是每英寸的像素个数,DPI值变大,即每英寸的像素个数会变多,而字体单位是不变的(英寸),DPI的计算为 像素/英寸,在屏幕分辨率不变的前提下,则显示的字体会变大。
(2)通常如果我们的屏幕分辨率比较高,则我们可以设置高DPI,这样程序的显示会就像被放大一样。

二、Windows下DPI模式简介

DPI模式
Windows支持的DPI模式有四种,分别是unware、systemware、pmv1、pmv2。四种DPI模式意义如下:
(1)unware: 表示告诉系统,在DPI变化时,系统帮忙缩放伸缩;支持系统:(-∞, vista)
(2)systemware: 我的程序会在启动的显示器上自己支持DPI aware, 不要对我缩放伸缩;但是程序被拖动到其他DPI不一样的显示器时, 请帮忙对我缩放伸缩;支持系统:[vista,win8.1)
(3)pmv1: 表示我会自己适应不同的DPI,不需要对我缩放伸缩;支持系统:[win8.1,+无穷)
(4)pmv2: 同pmv1;
但在[win8.1,+无穷)区间,由于系统具体实现方式不同,需要分为[win8.1, win10 1607) ,[win10 1607, +∞)
DPI模式对程序的影响
(1)unware模式:程序在100%DPI下显示正常,在200%DPI下,由于是告诉系统帮忙放大的,此时,程序就会显示模糊,不清晰;
(2)systemware模式:程序在200%DPI下启动,会自己处理支持200%DPI,此时看起来不会模糊。但是如果程序是从100%DPi启动后,再移动到200%DPI下,此时,程序就会显示模糊,不清晰;
(3)pmv1、pmv2:程序在此模式下,不管是对于100%DPI,还是200%DPI,程序都会自己适应不同的DPI变化,并且显示清晰。

三、程序支持DPI
typedef enum _Process_DPI_Awareness { 
  Process_DPI_Unaware            = 0,
  Process_System_DPI_Aware       = 1,
  Process_Per_Monitor_DPI_Aware  = 2
} Process_DPI_Awareness;
//以上三种方式是设置DPI的模式,可以通过相应的接口调用来支持
再介绍下相关API:
SetProcessDpiAwareness :设置当前进程对高DPi的支持方式
GetProcessDpiAwareness :查询某个进程对高DPI的支持方式
GetDpiForMonitor : 获取某个Monitor的DPI
WM_DPICHANGED :当某个程序窗口被拖到另外一个DPI的Monitor时收到
四、测试关注点

1、关注不同系统上各模式时程序的表现;
2、关注系统单屏、双屏不同DPI时的程序的表现;
3、关注双屏之间程序移动时动态变化;
4、程序运行、进程退出时,在不同DPI下的表现;
5、系统注销、不注销设置DPI后,程序的表现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值