【问题标题】:How can I disable the DPI scaling of WPF HwndSources exposed via COM?如何禁用通过 COM 公开的 WPF HwndSources 的 DPI 缩放?
【发布时间】:2016-01-17 07:19:11
【问题描述】:

我的公司有一个大型的遗留 Delphi 应用程序,我们正尝试将其逐步迁移到 .Net 框架。我们已经决定使用 WPF 实现新的 GUI 元素并通过 COM 公开它们。我相信这是相当标准的,因为我在网上看到很多关于人们这样做的材料。

到目前为止,我们的概念证明/演示样本运行良好。我们通过 COM 互操作库公开各种“创建元素 X”方法,这些方法返回新创建的 HwndSource 包装器的 Hwnd。然后我们调用 SetParent 将新控件放置在 Delphi 应用程序中需要的位置。

现在唯一的问题似乎是,当 DPI 设置为 96dpi 以外的任何值时,旧版 Delphi 和新 WPF GUI 元素无法共存。

我们从来没有在 Delphi 应用程序中很好地处理高 DPI,所以只建议客户使用 Windows(非 XP)缩放来在高 DPI 显示器上放大应用程序。

但是,这似乎导致与新的 WPF 元素发生冲突,因为它们似乎已经在增加的 DPI 设置下呈现,然后又被炸毁(也许?我不是 100% 确定问题出在哪里在这里)通过 Windows 缩放整个应用程序。

我现在想尝试的是禁用这些 WPF 元素的自动缩放,将它们带入 Delphi 应用程序,就好像监视器设置为 96dpi。然后我们让窗口缩放将它们恢复到所需的 DPI。

【问题讨论】:

    标签: c# .net wpf delphi


    【解决方案1】:

    DPI 感知是每个进程的。如果你真的想以这种方式解决问题,那些 WPF 元素需要告诉 Windows 他们不支持 DPI。 Here's how it's done in the API. 这可能不是一个好方法。 Here's how someone else says you can do it for WPF.

    更强大的解决方案是properly handle DPI in your Delphi application

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      相关资源
      最近更新 更多