Windows 从.net 2.0 WinForms应用程序以编程方式设置DPI
我想在96dpi上运行我的应用程序,无论Windows的dpi大小设置为多少。有可能吗 “编辑” 我发现使用Scale()方法和调整字体大小几乎可以达到目的Windows 从.net 2.0 WinForms应用程序以编程方式设置DPI,windows,winforms,dpi,Windows,Winforms,Dpi,我想在96dpi上运行我的应用程序,无论Windows的dpi大小设置为多少。有可能吗 “编辑” 我发现使用Scale()方法和调整字体大小几乎可以达到目的 public class MyForm : Form { private static bool ScaleDetected = false; const float DPI = 80F; protected override void OnPaint(PaintEventArgs e) {
public class MyForm : Form
{
private static bool ScaleDetected = false;
const float DPI = 80F;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (!ScaleDetected)
{
Graphics g = e.Graphics;
float factorX = DPI / g.DpiX;
float factorY = DPI / g.DpiY;
SizeF newSize = new SizeF(factorX, factorY);
AutoScaleDimensions = newSize;
AutoScaleMode = AutoScaleMode.Dpi;
Scale(newSize);
Font = new Font(Font.FontFamily, Font.Size * factorX);
ScaleDetected = true;
}
}
}
但是,在使用Janus控件的MDI应用程序中使用此“技巧”时,主窗体会调整大小,但对于某些其他窗体,不会应用缩放+更改的字体。如果我理解正确,您希望禁用DPI自动缩放。如果是这样,我认为您只需要调用
SetProcessDPIAware
告诉Windows您将自己处理它
有关如何从C#/VB.Net调用它的信息,请参见此链接:应将AutoScaleMode设置为AutoScaleMode。无可防止自动缩放