/
如今显示器的分辨率是越来越大,2K,4K分辨率的都很常见了。在高分屏下,我们必须对DPI进行缩放,要不显示字体会很小。一般系统默认DPI缩放级别为100%。如果改成150%,200%或者其他,我们会发现部分程序界面显示错乱,这是因为这些程序没有对高DPI进行处理。在VS中编写程序时可以很容易的做到支持DPI。
第一种方法是修改程序的Mainfest,如下图,我用的是VS2015,在属性页的Mainfest Tool中进行修改。
第二种方法是使用SetProcessDpiAwareness函数:
1
2
3
|
HRESULT
WINAPI
SetProcessDpiAwareness
(
_In_
PROCESS_DPI_AWARENESS
value
)
;
|
传入的参数有三个取值选择:
1
2
3
4
5
|
typedef
enum
_PROCESS_DPI_AWARENESS
{
PROCESS_DPI_UNAWARE
=
0
,
PROCESS_SYSTEM_DPI_AWARE
=
1
,
PROCESS_PER_MONITOR_DPI_AWARE
=
2
}
PROCESS_DPI_AWARENESS
;
|
对应前面VS设置中的三个选项,具体使用可以参考SetProcessDpiAwareness function
- 本文固定链接: http://blog.jianchihu.net/vs-build-high-dpi.html
- 转载请注明: Jianchihu 2016年01月08日 于 Jianchihu 发表
//
屏幕默认的显示比例是100%,但是有些用户喜欢调到“中等”或“较大”,这样的话,就可能导致我们开发的应用超出屏幕边界。因此,我们要获取屏幕显示比例,做出相应的处理。
Primary display DPI scale factor
Similarly, you can get the pixel density by using the LOGPIXELSX and LOGPIXELSY indices:
syntax
- // Get desktop dc
- desktopDc = GetDC(NULL);
- // Get native resolution
- horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);
- 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.