C# DPI适配问题(部分电脑)

什么是DPI?

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

当我们不想要我们的界面随着DPI的改变而改变的时候,可以让windows忽略我们的程序,代码如下:

// 在运行整个程序要打开的第一个winform的初始化里面,执行这个方法就可以了public static int ignoreDPI(){SetProcessDPIAware();  //重要IntPtr screenDC = GetDC(IntPtr.Zero);int dpi_x = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSX);int dpi_y = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSY);ReleaseDC(IntPtr.Zero, screenDC);return dpi_x;}[DllImport("user32.dll")]public static extern IntPtr GetDC(IntPtr ptr);[DllImport("user32.dll", EntryPoint = "ReleaseDC")]public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);[DllImport("gdi32.dll")]public static extern int GetDeviceCaps(IntPtr hdc, // handle to DCint nIndex // index of capability);[DllImport("user32.dll")]internal static extern bool SetProcessDPIAware();const int LOGPIXELSX = 88;const int LOGPIXELSY = 90;

这个时候,有些控件里面的文字显示的不对,是因为字体大小设置的问题

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

如果我们用的是系统字体(如GetStockObject(DEFAULT_GUI_FONT)), 那么这种情况下我们不用操心, 因为系统会对该字体在高DPI时进行相应的放大; 如果我们是用CreateFont自己创建的字体, 那就要我们自己对该字体进行放大了。

总结:如果不想麻烦,可以直接使用windows系统字体,如 (微软雅黑, 12pt /微软雅黑, 10.5pt 等)

Demo下载 https://download.csdn.net/download/qq_24905875/10681521

C# DPI适配问题相关推荐

  1. 【原创】多dpi适配的新姿势

    多dpi适配的新姿势 1. 简介 Android中经常要通过ImageView进行图片资源显示.在加载图片时,首先要考虑的两个因素就是体验问题和性能问题. 其中,体验问题是指图片显示的是否正确(例如U ...

  2. duilib适配高分屏(高DPI适配)

    duilib适配高分屏 高分屏(高DPI)适配 适配原理(duilib) 适配例子 高分屏(高DPI)适配 随着PC设备高分屏的越来越普及,PC端客户端软件也需要适配一下高分屏幕.在没有专门适配高分屏 ...

  3. Qt Windows DPI适配

    首先你要确定自己用的是Qt5 还是Qt6,据我所知,Qt6可以自己适配dpi,但是部分显示会有bug,比如输入框会突然透明等.但是Qt6可以自己锁定dpi,不随着系统的放大缩小而变化,这个代码我还没有 ...

  4. Windows微信DPI适配

    一.背景 随着近些年屏幕设备的不断发展,各种显示设备的分辨率也越来越高,在尺寸保持基本不变的情况下,分辨率越高,设备的DPI也越高,清晰度也就越高.高DPI的设备给我们提供了更精细的画质,然而Wind ...

  5. 关于DuiLib高DPI适配问题

    在某些情况下,虽然在高DPI的设置下DuiLib能正常的缩放,但是缩放后的显示效果很不好,文字图片显示模糊,影响用户体验,经过多次试验,解决办法如下: 在工程文件设置中,对相应工程做属性设置: 一 在 ...

  6. MFC程序的DPI适配

    最近项目需要,一个mfc写的应用程序要适配各种DPI,从网上查找了一些资料记录一下.目前Windows系统中大部分的high dpi 相关的api都是win8.1以上系统支持,项目需要兼容xp到win ...

  7. duilib:高Dpi下程序 适配

    **首先说明这个demo不是我自己写的,移植的Troy的demo,感谢他,感谢开源**这个demo在适配了高dpi,在win10下我们制作的程序一般都被win10自动拉大,但是这会导致一些问题,比如图 ...

  8. 关于WinForms的跨显示器DPI自适应

    点击上方蓝字关注"汪宇杰博客" 导语 WinForms 是运行在Windows上的传统.NET桌面应用技术框架.由于历史原因,它对高DPI以及跨不同DPI屏幕的支持有些问题,本文将 ...

  9. android 系统 dpi设置,安卓系统DPI的划分

    荣耀X1,安卓4.4升级版本改了DPI值,从原来的320DPI改成了Android 4.4中最新的400Dpi. 安卓7.0/7.1:没有260/300/340dpi 1.以前的划分,按照倍率换算 l ...

最新文章

  1. 15分钟学会MyEclipse导出jar文件再装换成exe可执行文件
  2. 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)
  3. Intel X86 CPU寄存器学习笔记
  4. 4种常用压缩格式在hadoop中的应用
  5. Keras及其前端配置
  6. 微服务链路追踪_微服务的战争:选型?分布式链路追踪
  7. Py2,Py3的差异
  8. FL Studio20中文高级版免费下载解锁教程
  9. java操作seaweedfs
  10. jupyter notebook 配置没问题却连接不上服务器
  11. getch方法_c语言中getch的用法
  12. Placing Lampposts ,UVa 10859 树形dp
  13. word 批量设置图片大小
  14. SAP BOM批量反查成品BOM清单(带BOM组件数量,反查物料清单)
  15. linux里hba状态_Linux更换HBA卡后重新扫盘指令
  16. 真约数求法 c语言,数学:求一个数的真约数(因数)的个数及所有约数之和
  17. 什么是黑盒测试和白盒测试的方法以及优缺点
  18. js_元素的隐藏与显示
  19. nRF52832学习记录(十一、TWI总线的应用 SHT21程序移植)
  20. 国内火狐浏览器不让使用有关广告插件解决方法

热门文章

  1. 干了十年对日外包的菜鸟的简单告白
  2. conda问题CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anac
  3. 深入浅出分布式存储性能优化方案
  4. 远特鸿蒙系统,远特通信获“2018年度优秀虚拟运营商”奖:“小而美”也是领军力量...
  5. edgewin10无法安装_win10重装Edge浏览器,教你Win10系统如何重装Edge浏览器
  6. ubuntu20环境搭建+Qt6安装
  7. 能源革命:可持续能源技术如何改变世界
  8. 吉林大学计算机控制在线作业一,吉大20春学期《新视野英语(一)》在线作业二-1(答案)...
  9. WinRAR v5.60
  10. 博世bosch解码器维修VIPXD转换器维修 汽车故障检测仪维修