让MFC(c++)编译的程序支持高DPI
问题描述:
写的程序A.exe,在笔记本开着盖子重启电脑,打开程序的时候是有界面的;但是如果点击重启之后把盖子合上之后,等重启完毕再打开A的时候,程序就打不开,没有任何的报错信息
尝试找问题:
使用Window的疑难杂症查找该程序的问题,发现选择其他的选项程序还是无法打开,只有选择以下第四个的问题的时候,系统修复完之后,程序就打开了,windows给出的解释是 对高DPI不适用,至此问题找到
解决方法:
1.改变系统的字体大小为100%,不要设置成125%,200%…
2.使用疑难杂症解决,系统会选择正确的配置,并保存
3.手动设置高DPI缩放,属性-兼容性-更改高DPI设置-替换高DPI缩放行为,缩放执行(应用程序)
4.使用VS设置对高DPI的支持,改为高DPI识别(但是我的VS2012和VS2015这个选项都是是否支持高DPI识别功能,我选择的是‘是’,但是打包之后的程序还是有问题,我看网上有人2015是有这个功能的,不知道是不是版本的问题)
5.使用程序控制该功能
#include <windows.h>
#include <winuser.h>
#include <VersionHelpers.h>
#include <ShellScalingAPI.h>
#include <stdlib.h>
#include <stdio.h>
#pragma comment(lib, "Shcore.lib") //不加这个库的话,程序会提醒SetProcessDpiAwareness无法解析的外部符号
SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE); //在程序刚开始运行的地方加入该语句
经研究发现VS2012和2015里面均没有 SetProcessDpiAwareness这个函数,可能是因为版本太旧的原因