首页 > 解决方案 > 为什么通过 cpp 项目打开时 C# winform 显示的 DPI 150% 不同

问题描述

通过 DPI 150% 的 cpp 项目打开 C# 应用程序时,我在 Windows 窗体中遇到问题。

问题是控件的截断形式和控件大小未按原样显示。例如,按钮大小为 23 像素,但显示为 14 像素。

在 4K 显示器中通过 C# 项目打开相同的 C# 应用程序时,我没有遇到此问题。控件尺寸也变得合适。

任何人都可以请建议将是什么问题以及如何解决它。

谢谢,拉杰什。

标签: c#c++

解决方案


我猜你正在使用 WinForms,它在 HiDpi 缩放方面存在一些问题。如果默认情况下您仅将应用程序作为您自己的项目启动,则它被标记为DPI Unaware。这意味着应用程序可能看起来像素化不是 100%,但布局还可以。

不幸的是,要创建一个支持 hi dpi 的 WinForm 应用程序并不容易。

https://docs.microsoft.com/en-us/windows/desktop/hidpi/high-dpi-desktop-application-development-on-windows

但是,当在系统的另一部分设置 DPI 模式的较大项目的一部分中使用您的组件时,这可能会导致布局问题。

如果它是一个 .NET 项目,您可以通过添加以下程序集属性来解决此问题:

[assembly: System.Windows.Media.DisableDpiAwareness]

我希望这有帮助。


推荐阅读