Windows 10操作系统上的Windows窗体图形问题
当我在Windows 10中运行任何Windows窗体应用程序时,窗口内的图形看起来是扭曲的:
在设计时,这不会发生:
有没有人经历过这个?
(请打开图片以便更好看。)
要解决此问题,您可以使用以下任一选项使应用程序DPI-Aware:
- 使用应用程序清单文件
- 使用SetProcessDPIAware
使用应用程序清单文件
要使应用程序具有DPI-Aware,您可以将Application Manifest文件添加到项目中。 然后在app.manifest
文件中,取消注释与DPI-Awareness相关的部分:
true
然后在app.config文件中,添加EnableWindowsFormsHighDpiAutoResizing
将其值设置为true:
有关更多信息,请查看高DPI MSDN页面。
使用SetProcessDPIAware
您可以在显示主窗体之前使用SetProcessDPIAware()
方法来设置应用程序dpi感知并防止窗口扩展应用程序。 您还应检查Windows版本是否大于或等于vista:
static class Program { [DllImport("user32.dll", SetLastError = true)] static extern bool SetProcessDPIAware(); /// /// The main entry point for the application. /// [STAThread] static void Main() { if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); Application.Run(new Form1()); } }
注意
虽然我以前使用SetProcessDPIAware
方法来解决问题,但在使用之前阅读了注意事项:
如果DLL在初始化期间缓存dpi设置,则
SetProcessDPIAware
会受到可能的竞争条件的影响。 因此,建议通过应用程序(.exe)清单而不是通过调用SetProcessDPIAware
来设置dpi-aware。
SetProcessDPIAware
仅可用于“要求”部分中指定的操作系统。 此方法在后续版本的操作系统中可能具有意外行为。 请改用SetProcessDpiAwareness
。DLL应该接受主机进程的dpi设置,而不是自己调用
SetProcessDPIAware
。 要正确设置,应将dpiAware指定为应用程序(.exe)清单的一部分。