winform的高dpi适应问题由来已久,属于一个历史遗留问题。主要是由于winform对不同尺寸、不同分辨率的屏幕适配不足造成的。接下来我们简单说一下如何解决,最后我们探索一下解决此问题的原理。

解决办法

winform的高dpi问题虽然一直没能解决,不过官方还是打了一个补丁的。

我们只需要调用一下官方提供的DpiHelper.LogicalToDeviceUnits方法,即可解决。那么问题来了,官方是如何解决这个问题的呢?

探索

public double LogicalToDeviceUnitsX(double value)
{
return (value * this.LogicalToDeviceUnitsScalingFactorX);
} public double LogicalToDeviceUnitsY(double value)
{
return (value * this.LogicalToDeviceUnitsScalingFactorY);
} public Size LogicalToDeviceUnits(Size logicalSize)
{
return new Size(this.LogicalToDeviceUnitsX(logicalSize.Width), this.LogicalToDeviceUnitsY(logicalSize.Height));
}

由上述代码可知,我们传入的值会被乘上LogicalToDeviceUnitsScalingFactorY,然后用于缩放界面。当你的缩放布局为150时候,它就会变成1.5。

它的本质是调用了Matrix图形变换矩阵进行的图形反射,想做相关了解的可以看一下这篇文章Transforms

public double LogicalToDeviceUnitsScalingFactorX
{
get
{
return this.TransformToDevice.Matrix.M11;
}
}

最新文章

  1. maven模块
  2. js 实现动态的图片时钟
  3. 年月日 生日 js插件
  4. PC互联网和移动互联网的本质差别
  5. 【ZOJ】3329 One Person Game
  6. windows 任务栏图标宽度固定
  7. 【动态规划】天堂(Heaven) 解题报告
  8. 制作安装包工具NSIS
  9. event.srcElement获得引发事件的控件(表单)
  10. 解决android3.0版本号以上应用接收不到开机广播问题
  11. Jdk1.7环境变量的配置
  12. 静态NAT、动态NAT
  13. Android常用的编译命令
  14. 入门系列之使用Sysdig监视您的Ubuntu 16.04系统
  15. jquery懒加载插件 jquery_lazyload 下载
  16. php实现猴子选大王
  17. django-pagination配置出错处理
  18. 简述MVC
  19. Win 7打开任务管理器的几种方法
  20. QT 5.4.1 for Android Ubuntu QtWebView Demo

热门文章

  1. LG P3768 简单的数学题
  2. C#计时器 Stopwatch 使用demo
  3. idea导入tomcat8源码搭建源码调试环境
  4. Study for Go ! Chapter two - Expression
  5. pytho获取C函数返回值
  6. node、mongodb、服务器相关
  7. Centos7提示Initial setup of CentOS Linux 7 (core)
  8. VUE学习-组件
  9. allure标题样式错乱处理
  10. matlab如何关闭figure