Csharp/C#教程:C#缩放UserControl内容以匹配用户Dpi /字体大小分享


C#缩放UserControl内容以匹配用户Dpi /字体大小

如何让OwnerDrawn UserControl尊重用户dpi(96/120 / xxx)和/或font-size(普通,大,超大)?

有些人建议在Graphics对象上使用DpiX和DpiY属性,但这似乎对我控制中的任何东西都没有(即它们总是设置为96,无论我选择哪种字体大小或dpi)。

StackOverflow上还有另一个类似的问题,它建议使用AutoScale属性,但建议的解决方案也没有做任何事情。

除了依赖WPF之外,在.NET中没有办法做到这一点吗?

您需要将UserControl的AutoScaleMode属性设置为AutoScaleMode.Dpi,而不是将AutoScale属性设置为true。 如果这样做,它会将AutoScaleMode重置为None。 AutoScale属性已过时,仅用于向后兼容(请参阅本MSDN文章中的重要说明 )。

此外,在Windows Vista / 7中,除非您明确指定应用程序支持DPI,否则Windows将模拟默认DPI环境,以便应用程序使用96 DPI进行渲染,然后将生成的位图缩放到适当的大小。 为避免这种情况,您可以更改应用程序清单以通知Windows您确实知道DPI – 请参阅本文中的使用清单声明DPI感知部分。

我有同样的问题,我尝试使用GetDC + GetDeviceCaps + ReleaseDC,除了使用Graphics工作,至少在Vista32上。 我对DPI没有经验,但是没有人回答这个问题,至少这对其他人有帮助。

查看创建DPI感知应用程序 。 这提到为什么它可能总是返回96,无论实际的DPI设置如何。

从上面链接引用:

Win32应用程序中的DPI扩展

在Win32应用程序中,执行以下操作:

回答: 关于DPI问题

使用 -statement( 原始源 )重写的示例代码:

上述就是C#学习教程:C#缩放UserControl内容以匹配用户Dpi /字体大小分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

float dpiX = 96, dpiY = 96; using(Graphics graphics = this.CreateGraphics()) { dpiX = graphics.DpiX; dpiY = graphics.DpiY; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/950744.html

(0)
上一篇 2021年11月17日
下一篇 2021年11月17日

精彩推荐