解决WinForm屏幕缩放适配只需修改两个Form的两个属性

最近要做一个windows下截屏识别文字的程序,调试发现截取的图像显示不完整。

输出了Screen.PrimaryScreen.Bounds.Width获取的值,结果与实际分辨率不同,所以确定了与我的系统设置了150%的显示缩放有关系。

网上找答案,各种dpi的计算或是bitmap的处理,折腾我大半个小时还是没找到完美的解决方案。

我决定打把lol放松放松(解决问题不必过急,一头扎进去反而会当局者迷,先放一放也许会突然地灵机一现)

在敌方水晶爆炸的那瞬间,我想起了之前做的WPF程序可以自动支持缩放,winform也应该可以吧。

缩放主要就是form的问题嘛,把form缩放尺寸计算好了,其它控件就可以有依据了。

我没有去用代码计算,先是把与size相关的form属性都改了一遍,看有什么效果,

果不其然找到了原因,结论就是:

AutoSize=True; AutoSizeMode=GrowAndShrink,两个属性完美解决问题。

 

 

补更:

MD,我智障了,因为Form上就一个背景图没有控件,所以设置了启用AutoSize后(根据内容自动调整大小)窗体宽度为0看不见了,之前F5运行屏幕截图就会被放大显示不完整,现在看起来就像是屏幕画面缩放正常还以为解决了呢,其实是窗体看不见了。

 

好在最终还是找到了真实可靠的解决方案……

 

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
  </application>

 

 给项目添加清单文件,加入上面的代码就可以感知DPI的变化了。

 

原文地址:https://www.cnblogs.com/aucy/p/9571969.html