如何让我的OwnerDrawn UserControl尊重用户dpi (96/120/xxx)和/或字体大小(正常、大、超大)?
有些人建议在Graphics对象上使用DpiX和DpiY属性,但我控制的任何东西似乎都不这样做(也就是说,无论我选择哪种字体大小或dpi,它们总是设置为96 )。
在StackOverflow上还有另一个类似的问题,它建议使用AutoScale属性,但是建议的解决方案也没有真正做任何事情。
除了依赖WPF之外,在.NET中没有其他方法可以做到这一点吗?
发布于 2009-08-19 12:40:45
您需要将UserControl的UserControl属性设置为AutoScaleMode.Dpi,而not则需要将AutoScale属性设置为true。如果您这样做了,它将把AutoScaleMode重新设置为None。AutoScale属性已经过时,仅为向后兼容性而存在(请参阅此MSDN文章中的重要注释)。
另外,在Windows /7中,除非明确指定应用程序是新闻部感知的,否则Windows将模拟默认DPI环境,以便应用程序使用96 DPI呈现,然后将结果位图缩放到适当的大小。为了避免这种情况,您可以修改应用程序清单,以通知Windows您实际上了解新闻部-请参阅这篇文章中的“使用清单声明新闻部意识”部分。
发布于 2009-08-04 08:06:23
我也有同样的问题,我尝试使用GetDC + GetDeviceCaps + ReleaseDC,除了使用图形工作,至少在Vista32上。我对新闻部还没有经验,但没有人回答这个问题,至少这可能对其他人有帮助。
看看创建可感知新闻部的应用程序。这提到了为什么无论新闻部的实际设置如何,它总是返回96。
引用上述链接:
新闻部在Win32应用程序中的缩放 在Win32应用程序中,执行以下操作:
答案来自:关于新闻部问题
用-语句(原始源)重写的示例代码:
float dpiX = 96, dpiY = 96;
using(Graphics graphics = this.CreateGraphics())
{
dpiX = graphics.DpiX;
dpiY = graphics.DpiY;
}https://stackoverflow.com/questions/572820
复制相似问题