win32 获取系统dpi

#include <windows.h>

//获取系统dpi
int get_system_dpi(void)
{

    //加载系统库user32.dll
    HMODULE hUser32 = LoadLibrary(TEXT("user32.dll"));
    SetProcessDPIAwareFn *ptr;
    int hdpi, vdpi;
    HDC desktopDC;

    //获取SetProcessDPIAware系统函数地址

    ptr = (SetProcessDPIAwareFn *)GetProcAddress(hUser32, "SetProcessDPIAware");
    if (ptr != NULL)
        ptr();//调用系统函数
    FreeLibrary(hUser32);

    desktopDC = GetDC(NULL);
    hdpi = GetDeviceCaps(desktopDC, LOGPIXELSX);//我这里是120
    vdpi = GetDeviceCaps(desktopDC, LOGPIXELSY);//我这里是120
    /* hdpi,vdpi = 100 means 96dpi. */
    return ((hdpi + vdpi) * 96 + 0.5f) / 200;//得出115
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Sc-3.0.0.91-2019.4.22 1、[更新]部分设置适配Win10 1903; 2、[更新]计划任务参数输入框新增非法字符的判断; 3、[更新]微调硬件驱动卸载过滤机制(反馈者:信息-郗广宗); 4、[更新]调整NT6清理最近使用文件痕迹代码; 5、[修复]Win7默认智能开启Aero效果部分环境无效的问题; 6、[修复]3.0.0.89部分磁盘控制器驱动有严重bug,已回滚88版本的驱动; 历史更新: Sc-3.0.0.89-2019.4.1 1、[更新]新增和更新Win7、Win10大量的磁盘控制器及Nvme驱动; 2、[修复]砍掉部分Win10 x64里WHQL未认证的磁盘控制器驱动; Sc-3.0.0.88-2019.2.26 更新日志: 1、[更新]新增Win10部署后自动同步开始菜单的磁贴(反馈者:信息-郗广宗); 2、[更新]重写预置网络位置代码确保成功率; 3、[更新]通过购买渠道获得的SC特权服务不再集成软件魔盒,需找客服开通; 4、[修复]在部分环境跳过OOBE未能自动激活administrator用户(反馈者:信息-郗广宗); 5、[修复]部分环境勾选了"转移桌面文件到所有用户"导致封装失败的问题; 6、[修复]优化加域代码; Sc-3.0.0.81-2019.2.3 更新日志: 1、[更新]优化关闭笔记本小键盘算法; 2、[更新]加强防流氓机制代码; 3、[修复]未勾选跳过OOBE遇注册名称或单位是中文的情况下导致封装失败(反馈者:八戒); 4、[修复]修复Win10注册名称或单位设置不生效的问题(反馈者:梦醒时分); Sc-3.0.0.72-2019.1.10 更新日志: 1、[更新]新增SC封装方式可以在总裁联盟里兑换来提升等级; 2、[更新]新增带密码用户自动登录功能; 3、[更新]更新Win7 intel,AMD磁盘控制器驱动以及新增intel/Samsung/Marvell的nvme驱动; 4、[修复]未勾选跳过OOBE不生效的问题; 5、[修复]修正3.0.0.70在Win10部分环境下导入SRS驱动失败; Sc-3.0.0.66-2018.11.25 更新日志: 1、[更新]加强防流氓机制代码; 2、[更新]Win7默认开启Aero效果代码优化(反馈者:bfgxp0); 3、[更新]优化拨号宽带创建代码; Sc-3.0.0.60-2018.11.12 更新日志: 1、[更新]清理垃圾新增删除文件搜索记录; 2、[更新]Win7首次进桌面默认自动打开Aero效果; 3、[更新]新增Win 2003 64位封装支持; 4、[更新]指定部署分辨率不受驱动安装重置分辨率的问题; Sc-3.0.0.56-2018.10.12 更新日志: 1、[更新]适配Win10 1809跳过OOBE弹出隐私设置窗口; 2、[更新]计划任务调用程序自动切换运行目录至被调用程序路径; 3、[修复]部分环境封装设置里打开文件失败的问题; 4、[修复]优化系统环境的检测(反馈者:bfgxp0); 5、[修复]修复封装体检休眠文件占用大小计算错误; Sc-3.0.0.39-2018.9.9 1、[更新]部署模块的计时功能去掉小时的计算,只保留分和秒; 2、[修复]防流氓模式遇UEFI启动环境不能正常部署的问题; 3、[修复]WIN10防流氓模式遇当前用户名带后缀的环境报错的问题; 4、[修复]部分环境同步IE主页导致IE浏览器闪退的问题; Sc-3.0.0.19-2018.8.7 1、[更新]加强防流氓机制代码; 2、[更新]程序遇多显示器环境居中主显示器; 3、[更新]新增部署模块; 4、[修复]清理多余SRS驱动逻辑错误导致I2C HID设备感叹号的问题(反馈者:bfgxp0); 5、[修复]WIN10转移桌面文件到所有用户导致EDGE桌面白图标问题; Sc-3.0.0.16-2018.6.21 1、[更新]Win10同步封装前文件关联(反馈者:bfgxp0); 2、[更新]NT5目标系统将自动设置网卡连接后在通知区域显示图标并无法链接时通知我(反馈者:bfgxp0); 3、[更新]新增自定义文件校验功能; 4、[更新]新增OEM加载上一次设置的信息功能; 5、[更新]新增部署模块; 6、[更新]创建宽带连接和重启计算机更新静默和可见两种方式; 7、[修复]目标系统中的设置指定分辨率勾选框操作问题(反馈者:Snooker); 8、[修复]目标系统中的设置指定分辨率在NT6平台上执行失败的问题(反馈者:Snooker); 9、[修复]Win8部署文字乱码问题(反馈者:奔奔); 10、[修复]Win10普通用户隶属用户组为空的问题(反馈者:l547478659); Sc-3.0.0.8-2
这个模块之前早就写了的,只是最近一直上班总忘记发,现在已经凌晨四点过了,才下班回来,想起这个模块,发出来大伙瞅瞅。 我们设计好软件界面编译后,如果运行在高DPI的屏幕上,可能存在字体模糊的情况。例如我目前使用的笔记本电脑(感谢某大哥赞助)就是这么个情况,以前写好的软件打开一看,字体模模糊糊的。 如图: 从图中可以看到,软件读取屏幕的DPI也没有读取到正确的缩放比例,正确的应该是125%,而不是图中显示的100%。 要解决字体模糊和正确读取屏幕缩放比例(DPI),我选择的方案是在编译后的软件中设置存根清单来实现。 用到的存根清单设置工具, 此软件我之前有开源过,需要源码请自行搜索。 方法:运行这个工具,将需要处理的文件(已编译的EXE可执行文件)拖到这个工具的窗口中,然后勾选DPI感知,最后点击更新即可。 如图: 这样操作以后,软件就能够正确读取到缩放比例,而且界面的字体也变清晰了,随之出现新的问题。 如图: 缩放比例读取正确,字体也清晰了,但是导致的问题是由于字体变大,窗口组件显示不完整了。 这时候就需要用到今天开源的这给个模块 ,附上这个模块的演示源码 。 重点来了,处理程序适应屏幕缩放的解决步骤: 1,在窗口启动事件下,调用该模块的取屏幕缩放比例()命令来获取屏幕缩放比例,判断是否需要缩放窗口组件,如果需要则继续调用适配屏幕缩放()命令,这条命令会根据指定的缩放比例改变指定窗口及其所有窗口组件的尺寸,如果有多个窗口,则每个窗口都需要这样处理。 2,编译您的程序,然后使用存根清单设置工具启用DPI感知选项。 注意:第一个操作是在源码中调用模块并写入适配的代码,第二个操作是对编译后的EXE可执行文件的存根清单进行设置。 完成这两个操作,你的软件就能很好的适配了。 如图: 这只是一个比较笨拙的解决方案,仅供参考! 注意:代码中使用此模块后,还需配合存根清单设置工具使用,如果没有启用DPI感知,则达不到预期的效果!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值