【问题标题】:wxWidgets DPI awareness (V2) not working as expectedwxWidgets DPI 感知 (V2) 未按预期工作
【发布时间】:2021-05-09 09:58:31
【问题描述】:

我想编写一个小应用程序并决定使用 wxWidgets 来制作 UI。然而,当我从官网运行thissample 时,我发现有些文字(特别是菜单)是模糊的。我做了一些研究并尝试了一些东西(我正在寻找每个监视器 v2 DPI 意识)。这是我到目前为止尝试过的:

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

据我所知,我完全按照教程进行操作,但无法使其正常工作。如果你能给我如何让它工作的分步说明,那将是完美的,但我会很感激任何能让我更接近让它工作的提示强>。我看过的所有教程和论坛主题都不起作用或似乎不完整(其中大多数只是提到了上面的第 1 点或第 2 点)。

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

PS:我想到了使用资源黑客来检查资源文件是否被包含在内。但是,为了查看任何内容,我必须包含其他资源(对吗?),这是我无法做到的(Visual Studio 无法读取它自己创建的资源文件的语言,原因超出了我的理解. 所以用纯文本编辑器以外的任何方式打开文件都会导致错误)。

【问题讨论】:

    标签: c++ windows wxwidgets


    【解决方案1】:

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

    在您的项目属性中转到Configuration Properties -> Manifest Tool -> Input and Output 并将Additional Manifest Files 设置为<wxPath>\include\wx\msw\amd64_dpi_aware.manifest,无论您的wxPath 是什么。

    【讨论】:

    • 我不熟悉这个,谢谢你的提示。这与使用 SetProcessDpiAwarenessContext 的效果相同,包括图形故障。
    【解决方案2】:

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

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

    【讨论】:

    • 这就是我第 1 点的意思。也许我的描述是错误的,但我觉得我对 wxWidgets 或资源文件有一个严重的误解。我创建了一个名为 resource.rc 的资源文件并添加了 #include "wx/msw/wx.rc" (确保路径正确)。我将重新安装 wxWidgets 看看是否有帮助。感谢您的回复。
    • 在这种情况下,您确实应该在可执行文件中包含清单。请检查您是否链接了编译 .rc 文件产生的 .res 文件。
    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 2023-03-14
    • 1970-01-01
    • 2015-10-26
    • 2021-06-04
    • 2022-01-24
    • 2015-05-11
    • 2020-05-15
    相关资源
    最近更新 更多