禁用 WPF应用程序自动感知 DPI
在项目的Assemblyinfo.cs文件里插入一个参数
[assembly: System.Windows.Media.DisableDpiAwareness]
为进程设置默认 DPI 感知
方法一:通过程序清单进行设置
自 Visual Studio 2015 起,此设置已存在于 中app.manifest
,只需取消注释即可。
<!-- 指示该应用程序可感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
方法二:以编程方式设置默认感知
在进程中创建 HWND 窗口后,不再支持更改 DPI 感知模式。 如果要以编程方式设置进程默认 DPI 感知模式,则必须在创建任何 HWND 之前调用相应的 API。
Windows 7
SetProcessDPIAware
[DllImport("user32.dll", SetLastError=true)]
static extern bool SetProcessDPIAware();
Windows 8.1
SetProcessDpiAwareness
[DllImport("shcore.dll")]
static extern int SetProcessDpiAwareness(ProcessDPIAwareness value);
enum ProcessDPIAwareness
{
DPI_Unaware = 0,
System_DPI_Aware = 1,
Per_Monitor_DPI_Aware = 2
}
Windows 10 版本 1703
SetProcessDpiAwarenessContext()
(选择每显示器 DPI 感知时,请使用Context_PerMonitorAwareV2
)文章来源:https://www.toymoban.com/news/detail-442499.html
另请参阅:混合模式 DPI 缩放和 DPI 感知 API - MSDN文章来源地址https://www.toymoban.com/news/detail-442499.html
到了这里,关于禁用WinForm调用WPF控件时在高DPI下自动缩放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!