要解决此问题,您可以使用以下任一选项使应用程序DPI-Aware:
要使应用程序具有DPI-Aware,您可以将Application Manifest文件添加到项目中.然后在该SetProcessDPIAware文件中,取消注释与DPI-Awareness相关的部分:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)
然后在app.config文件中,将SetProcessDpiAwareness其值设置为true:
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看高DPI MSDN页面.
您可以SetProcessDpiAwarenessContext在显示主窗体之前使用方法来设置应用程序dpi,并防止窗口缩放应用程序.您还应检查Windows版本是否大于或等于vista:
static class Program
{
[DllImport("user32.dll", SetLastError = true)]
static extern bool SetProcessDPIAware();
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
if (Environment.OSVersion.Version.Major >= 6)
SetProcessDPIAware();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(true);
Application.Run(new Form1());
}
}
Run Code Online (Sandbox Code Playgroud)
注意
虽然我之前使用该app.manifest方法来解决问题,但在使用之前阅读了注意事项:
EnableWindowsFormsHighDpiAutoResizing如果DLL在初始化期间缓存dpi设置,则受可能的竞争条件限制.因此,建议通过应用程序(.exe)清单而不是通过调用来设置dpi-awareSetProcessDPIAware.
SetProcessDPIAware()仅可在"要求"部分中指定的操作系统中使用.此方法在后续版本的操作系统中可能具有意外行为.请DpiHelper改用.DLL应该接受主机进程的dpi设置而不是
SetProcessDPIAware自己调用.要正确设置,应将dpiAware指定为应用程序(.exe)清单的一部分.
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |