如何获得屏幕分辨率?事实是,如果在OS方法的设置中更改缩放选项
Screen.AllScreens[screenIndex].Bounds.Width
给出错误的解决方案。问题出现在4k显示器中。帮助解决。非常感谢你提前!
private static Rectangle GetScreenRect(int screenIndex)
{
Rectangle screenRect = new Rectangle();
screenRect.Size = new Size((Screen.AllScreens[screenIndex].Bounds.Width, Screen.AllScreens[screenIndex].Bounds.Height);
screenRect.Location = new Point(Screen.AllScreens[screenIndex].Bounds.X, Screen.AllScreens[screenIndex].Bounds.Y);
return screenRect;
}
P.S:我只使用.NET 2.0。
答案 0 :(得分:1)
那是不错误的结果:)
它是兼容层的一部分,允许旧应用程序在具有高DPI的系统上运行相对较好。你的应用程序并没有告诉Windows它是新的,而且很酷,可以很好地处理它,所以Windows假装它的屏幕比它们实际上小 - 这允许你的应用程序像往常一样渲染,而Windows处理使你的应用程序足够大,可以舒适地使用
事实是,虽然Winforms实际上被设计成一个很好的框架,允许你处理多个DPI(和本地化等),但它实际上并没有使用。因此,大多数应用程序与老式MFC应用程序一样愚蠢 - 它们只是不能很好地扩展。
事实上,你的应用程序就是为什么存在这些兼容性层的原因 - 你已经仍然使用.NET 2.0,很久之后它就被弃用了(我假设您仍然支持Windows XP)。如果Windows没有骗你的应用程序,它将是绝对无法使用的,文本很小,无法读取(或控制随机抛出一些自动缩放,而其他人则没有)。
现在,如果您认为您的应用程序实际上能够正确处理DPI扩展(如果您没有设计它来执行此操作,它可能不会),您可以使用{ {3}}告诉Windows你不需要那些甜蜜谎言的功能 - 你可以自己处理扩展,谢谢你。这有很多好处(一切看起来都会更加清晰),但这意味着你需要在任何地方修复你的扩展。请注意,此功能在Windows 6之前根本不存在(不执行DPI更正),您需要在Windows 6+上使用SetProcessDpiAwareness(SetProcessDpiAwareness是Windows 8.1 +)。