c# - 如何禁用通过 COM 公开的 WPF HwndSources 的 DPI 缩放?

标签 c# .net wpf delphi

我的公司有一个大型的遗留 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。

最佳答案

DPI-Awareness 是针对每个进程的。如果你真的想用这种方式解决问题,那些 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 .

关于c# - 如何禁用通过 COM 公开的 WPF HwndSources 的 DPI 缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206028/

相关文章:

c# - CaSTLe ActiveRecord - Setter 问题

c# - 使用多个asp创建Bootstrap-Datepicker :Repeater TextBoxes

c# - 未找到 View 'Index' 或其母版

.net - 使用 .NET 和 OpenCV 进行线程化?

.net - 如何获得图像中的多数颜色?

c# - XDocument 获取 XML 文件的一部分

c# - 如何测量 .NET Memory Cache 4.0 的当前大小?

c# - 在 C# 中使用 await 内部属性

wpf 文本框工具提示绑定(bind)自身值

c# - 从 wpf 应用程序打开并且 outlook 正在运行时,如何使 outlook 选择名称对话框聚焦