Tag: highdpi

混合WPF和winforms项目DPI意识

我有一个使用winforms和WPF的C#程序,我很难让它在高DPI环境中工作。 目前,如果我从解决方案中删除所有WPF项目并运行它,它将会很好地扩展,但是只要我重新添加任何wpf(function必需),扩展就会失败并且UI变得无法使用。 这似乎与以前的SO问题完全相同: 混合WinForms和WPF应用程序中的.Net 3.5中的DPI缩放以及使用DPI正确扩展WinForms的问题 我按照这些问题的建议,尝试添加清单文件和提供的dpi识别代码。 我还将项目升级到.net framework 4.6.1(从4.0开始)并包含了app.config设置: 这确实影响了程序的主shell(因此,不是在一个小窗口中加载所有控件被压缩,主程序窗口打开最大化并显示正常)但是,当我从主窗口输入任何winforms子窗体或插件时,缩放失败。 当我输入任何WPF子表单或插件,或返回到主屏幕时,这些正确呈现。 只有winformsfunction无法正确扩展。 有没有人对如何让混合winforms / WPF项目在高DPI中正确扩展有任何想法? 提前致谢

如何以编程方式激活“在高dpi设置上禁用显示缩放”

我正在使用Visual Studio 2010上的C#开发Windows表单应用程序。我发现如果我使用高dpi显示设置,此应用程序将缩放。 但是,如果我通过Windows资源管理器上的鼠标右键菜单激活文件属性“在高dpi设置上禁用显示缩放”,它似乎没有缩放。 有没有办法在Visual Studion 2010 C#或更高版本上以编程方式激活“在高dpi设置上禁用显示缩放”? 我尝试设置应用程序清单文件但尚未成功设置它。

DPI意识 – 在一个版本中不知道,在其他版本中意识到系统

所以我们有这个奇怪的问题。 我们的应用程序是一个C#/ WinForms应用程序。 在我们的6.0版本中,我们的应用程序不支持DPI。 在我们的6.1版本中,它突然变成DPI意识。 在6.0版本中,如果您在高DPI中运行它,它使用Windows位图缩放,这很好,因为这不会影响屏幕布局。 在6.1版本中,因为它由于某种原因变得DPI意识到,用户界面被破坏了。 我们现在无法解决这个问题。 我们有数百个屏幕,因此在DPI识别模式下使它们全部正常工作将花费大量时间。 我们已使用SysInternals Process Explorer确认了这一点。 在我们的6.0版本中,它显示了Unaware ,但在我们的6.1版本中,它最初显示Unaware ,但随后更改为System Aware 。 后者发生在代码从EXE进入包含所有用户界面代码的程序集DLL中时(我们的EXE基本上是一个非常薄的shell;它实际上只是在我们的表示层程序集上调用一个Controller类。) 我们已确认以下内容: 两个版本都使用VSS 2017在发布模式下构建。 两个版本都针对相同的.NET Framework(4.5) 两个版本都使用相同的DevExpress版本。 两个版本都具有相同的应用程序清单,该清单未启用DPI感知设置。 这两个版本都没有任何与DPI相关的Windows API的调用。 使用Sys Internals和一些消息框,我们确定了6.1版本在什么时候开始意识到(演示程序集中的入口点)以及那时加载了什么DLL(我们的,DevExpress,其他依赖项),然后我们构建了一个小的虚拟应用程序,引用相同的DLL,并确认它们已加载。 该虚拟应用程序不会成为DPI意识。 我们比较了两个版本之间的主要csproj文件,没有任何有意义的差异。 两个版本都没有引用WPF中的任何内容。 我们不明白为什么我们的6.1版本突然变得DPI意识到了。 我们还无能为力,我们需要一个修复程序,将此版本恢复到DPI unaware模式。 它正在阻止我们的发布。 非常感谢任何指针。 我们愿意在这一点上尝试任何事情。