wxWidgets DPI感知(V2)未按预期工作



我想写一个小应用程序,并决定使用wxWidgets作为UI。然而,当我从官方网站上运行这个样本时,我发现一些文本(特别是菜单(很模糊。我做了一些研究并尝试了一些东西(我正在寻找每台显示器的v2 DPI意识(。以下是我迄今为止所尝试的:

  1. 我创建了一个资源文件,并从中包含wx/msw/wx.rc,然后将wxUSE_DPI_AWARE_MANIFEST定义为2(如本文所述(,但没有任何效果
  2. 我使用了Windows的SetProcessDpiAwarenessContext函数(以DPI_AWAREESS_CONTEXT_PER_MONITOR_AVARE_V2为参数(。这修复了主要问题,但现在如果我在高DPI监视器上启动应用程序并将窗口移动到低DPI监视器,则如图所示,菜单项下方会出现图形故障
  3. 以上两者的结合。同样,资源文件没有任何效果,结果总是与第2点完全相同

据我所知,我完全遵循了教程,但我无法让它发挥作用。如果你能一步一步地给我关于如何让它工作的说明,那将是完美的,但我会非常感谢任何能让我更接近工作的提示。我看过的所有教程和论坛帖子都不起作用,或者似乎不完整(其中大多数只是提到了上面的第1点或第2点(。

我在一台Windows 10机器上,wxWidgets的版本是3.1.5(发布时的最新版本(。

PS:我想用资源黑客来检查资源文件是否包含在内。然而,为了查看任何内容,我必须插入额外的资源(对吧?(,而我无法做到这一点(Visual Studio无法读取它自己创建的资源文件的语言,原因超出了我的理解范围。因此,在纯文本编辑器之外的任何其他编辑器中打开该文件都会导致错误(。

我不知道wxUSE_DPI_AWARE_MANIFEST,但在我的Visual Studio 2019中,我配置了Manifest Tool

在您的项目属性中,转到Configuration Properties -> Manifest Tool -> Input and Output并将Additional Manifest Files设置为<wxPath>includewxmswamd64_dpi_aware.manifest,无论您的wxPath在哪里。

wxUSE_DPI_AWARE_MANIFEST只影响wx/msw/wx.rc,它应该包含在您自己的应用程序.rc文件中,不清楚您是否这样做。如果你不做,请做。

您还应该能够在Visual Studio中将可执行文件作为资源文件打开,以检查它是否包含预期的清单。如果这不起作用,您的MSVS安装似乎有问题,需要修复。

最新更新