关于windows下DPI详解

2023-11-13

    什么DPI? 全称是dots per inch (DPI), 也就是每英寸的点数,在显示器上就是每英寸的像素个数,Window上一般默认是96 dpi 作为100% 的缩放比率, 但是要注意的是该值未必是真正的显示器物理值, 只是Windows里我们的一个参考标准。

    下面我们思考为什么DPI设置高了之后, 我们看到的字体会变大? 因为系统字体是是以固定大小(宋体10号字,物理尺寸为(10/72)英寸)设计的, 当我们DPI设置高了之后 ,说明该字体要占有更多的像素, 在屏幕分辨率不变的前提下, 看起来也就大了。所以如果我们设置高DPI,通常也意味着我们的显示器是高分辨率, 里面的字体看起来太小了, 我们需要提高DPI来把内容放大。

关于DPI参数的设置:

    第一种Unaware, 该种方式是告诉系统, 我的程序不支持DPI aware, 请通过DWM虚拟化帮我们实现。 该方式通过GetWindowRect取到的坐标都是经过DWM缩放后的, 无论对方窗口是不是支持DWM虚拟化。

    第二种方式是System DPI aware, 该方式下告诉系统, 我的程序会在启动的显示器上自己支持DPI aware, 所以不需要对我进行DWM 虚拟化。 但是当我的程序被拖动到其他DPI不一样的显示器时, 请对我们先进行system DWM虚拟化缩放。

    第三种方式是Per Monitor DPI aware, 该方式是告诉系统, 请永远不要对我进行DWM虚拟化,我会自己针对不同的Monitor的DPi缩放比率进行缩放。 这种方式需要自己完成对高DPI的支持。

    chrome 是设置的Per Monitor DPI aware  猜测其UI应该自己内部实现了对高DPI的支持,基于CEF的开发  建议设置System DPI aware 来完成对高DPI的支持。

    获取本机DPI时可以使用下面例子来获取,这个在设置Per Monitor DPI aware  模式下才能取到正确的DPI,在System DPI aware下第一次可以获取到准确的DPI值,如果没有注销,则每次获取的为第一次的值啦,不是真正的DPI值。不推荐使用GetDeviceCaps这个哦。

    UINT g_xDPI = 0;
    UINT g_yDPI = 0;
    int nDpi = GetDpiForMonitor(MonitorFromWindow(GetDesktopWindow(),       MONITOR_DEFAULTTONEAREST),MDT_EFFECTIVE_DPI, (UINT*)&g_xDPI, (UINT*)&g_yDPI);

 

引用:http://www.cppblog.com/weiym/archive/2014/02/18/205841.htm

            https://docs.microsoft.com/zh-cn/windows/desktop/api/_hidpi/

            https://docs.microsoft.com/zh-cn/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于windows下DPI详解 的相关文章

随机推荐

  • 安卓APP_ 布局(6) —— ConstrainLayout约束布局(重要)

    摘自 安卓APP 布局 6 ConstrainLayout约束布局 重要 作者 丶PURSUING 发布时间 2021 04 12 10 49 42 网址 https blog csdn net weixin 44742824 articl
  • B站粉丝数显示器代码解析学习

    代码来源B站 会飞的阿卡林https www bilibili com video BV14W41167tY 学习使用ESP8266的WIFI无线连接 在这里可以了解到SPI协议在Arduino中的使用 后来也使用ESP8266做了其他项目
  • 交换机与路由器技术-36-端口镜像

    目录 一 端口镜像 1 1 概述 1 2 目的 1 3 功能 1 4 端口镜像应用场景 1 4 1 本地端口镜像 SPAN 1 4 2 远程端口镜像 RSPAN 1 5 配置本地端口 1 6 配置远程端口镜像 RSPAN 一 端口镜像 1
  • Rabbitmq和kafka有什么区别?

    RabbitMQ和Kafka都是流行的消息队列系统 它们都可以用于构建分布式系统中的消息传递机制 虽然它们都可以用于相似的场景 但它们之间仍然存在一些重要的区别 一 数据处理方式不同 RabbitMQ是一个传统的AMQP消息队列 它使用队列
  • Java语言实现通讯录,联系人信息存在数据库里

    通讯录管理 问题描述 编写一个简单的通讯录管理程序 通讯录中需要存储姓名 地址 电话号码 邮政编码四项 还可以存储Email 家庭电话等信息 基本要求 程序应提供的基本管理功能有 1 添加 即增加一个人的记录到通信录中 2 显示 即在屏幕上
  • postman 将返回值设置为环境变量

    代码如下 var jsonData JSON parse responseBody pm globals set token jsonData data token
  • win2012 管理用户账号点滴

    1 c windows system32 config SAM 存储本地用户账号 2 cmd gt set 可以查看很多信息 包括logon server 3 创建一般服务账号的时候 要选择 密码永不过期 4 cmd gt net user
  • 【数据结构】线性表的顺序存储结构

    线性表 由n n 0 个数据元素 结点 a1 a2 an组成的有限序列 其中数据元素的个数n定义为表的长度 当n 0时称为空表 常常将非空的线性表 n gt 0 记作 a1 a2 an 这里的数据元素ai 1 i n 只是一个抽象的符号 其
  • DNS & bind详解

    文章目录 1 DNS基础知识 1 1 DNS的出现及演化 1 2 什么是DNS 1 3 域的分类 1 4 主机名 域名 FQDN 1 5 DNS解析流程 1 6 DNS分类 1 7 资源记录 2 DNS安装配置 2 1 安装DNS 2 2
  • 《C++ Primer》学习笔记(十六):模板与泛型编程

    C Primer 学习笔记 十六 模板与泛型编程 定义模板 函数模板 类模板 模板参数 控制实例化 模板实参推断 类型转换与模板类型参数 尾置返回类型与类型转换 模板实参推断和引用 转发 可变参数模板 模板特例化 定义模板 函数模板 tem
  • 简单记录我的第一个云服务器:华为云服务器

    一直想买个服务器用来瞎鼓捣 或者说把之前的一些乱七八糟的小项目部署到服务器给自己的 object 看 但是我也很无奈昂 一个菜鸡 临近毕业了说来就来 于是就买了个华为云服务器 毕竟在某地培训很是无聊 服务器如下 因为用的是linux系统 需
  • 越来越火的Serverless(无服务器计算),到底是个啥?

    今天这篇文章 我们来聊一个云计算领域的热门概念 Serverless 到底什么是Serverless 英语好的童鞋 可能一眼就看出来了 Serverless是由Server和less两个词根组成的词 从字面上理解 就是 无服务器 行业通常所
  • 【C++】类与类之间的 5 种关系

    文章目录 前沿 1 继承关系 2 关联关系 3 聚合关系 4 组合关系 5 依赖关系 6 比较五种关系 前沿 该文章就是简要的总结一下面向对象的 类与类之间的关系 熟悉类与类之间的关系 能够帮助我们更好的设计出合理的类 1 继承关系 继承关
  • Python进阶-----面向对象3.0(面对对象三大特征之---封装)

    目录 前言 什么是封装 Python私有化封装 习题 前言 上一期是讲解Python中类的私有属性和方法 其实很好理解 我给一个类中的部分属性进行加密拒绝访问 上一期链接Python进阶 面向对象2 0 特有属性和方法与私有属性和方法 Py
  • VirtualBox安装Ubuntu(20.10桌面版)教程

    由于学校的课程需要 需要安装一个Linux系统 根据电脑配置 8G运存 250G硬盘剩余 最终选择了使用虚拟机 VirtualBox 免费开源 上安装Linux系统 Ubuntu 使用最多 BUG少 界面简洁 的方案 根据需求 我将安装过程
  • DDoS攻击及防御技术综述

    DDoS攻击及防御技术综述 本文内容为论文转载 摘 要 分布式拒绝服务攻击 Distributed Denial of Service DDoS 是互联网上有严重威胁的攻击方式之一 难以完全对其进行防御 介绍DDoS攻击的技术原理 在此基础
  • 如何在CSDN中发布博客

    1 首先打开CSDN官网 进行注册然后登录 登录以后看到的界面如下 2 进入会员中心右边有个创作中心点进去 看到界面如下 3 在上界面中 可以单击 发布 直接写博客 如下所示 4 也可以单击 Markdown编辑器 或者 富文本编辑器 进入
  • react入门(六)——组合组件

    什么是组合组件 大家都知道我们在做项目的时候不可能只有一个组件或两个组件 是由很多个组件组合使用的 而且每个组件之间或多或少的有些关系 我把这些组件就称作组合组件 例如我们想要实现以下效果 分析 拆分为静态组件 我们可以将他拆分为三个组件
  • 【Spark Operator】核数设置Cores/Cores Limit/Cores Request,你搞清楚没有?

    我们先看下 Spark 3 0 官方文档 关于几个 Core 的参数的解读 spark driver cores spark kubernetes driver request cores spark kubernetes driver l
  • 关于windows下DPI详解

    什么DPI 全称是dots per inch DPI 也就是每英寸的点数 在显示器上就是每英寸的像素个数 Window上一般默认是96 dpi 作为100 的缩放比率 但是要注意的是该值未必是真正的显示器物理值 只是Windows里我们的一