繁体   English   中英

VSTO 加载项中的 SetProcessDPIAware

[英]SetProcessDPIAware in VSTO add-in

网上有很多关于通过调用SetProcessDPIAware() (或通过对应用程序的清单进行一些相关更改SetProcessDPIAware()为 Winforms 应用程序设置 DPI 感知的帖子。 例如:

如何配置应用程序以在具有高 DPI 设置(例如 150%)的机器上正确运行?

但是,我不确定如何以及在何处调用 Excel、PowerPoint 等VSTO 加载项中的SetProcessDPIAware()。我已经对此进行了一段时间的试验,但无法使其正常工作,因为加载项的各种 Winform 仍然没有在高 DPI 显示器上正确缩放。

任何人都可以提供有关如何在 VSTO 加载项中实施 DPI 感知的指导,特别是?

您不能在此处影响 DPI 意识,因为这是每个进程的设置,而您的进程是 Excel 本身(即 DPI 意识)。 您只能在程序调用第一个与 DPI 相关的 Windows 函数之前使用SetProcessDPIAware()函数,Excel 甚至在您的加载项启动之前很久就这样做了。 但是,当启用 DPI 感知时,不要指望 Winforms 像魔术一样正确缩放。 启用 DPI 意识无非是:打开潘多拉的盒子,打开 Winforms 为您提供的所有令人讨厌的高 DPI 效果的盒子。 您将不得不自己摆弄控制距离和尺寸。 微软官方声明:如果你想要DPI感知,不要使用Winforms,使用WPF 如果你想要Touch,不要使用WPF,使用UWP......

我们在 Microsoft Word 的 Chemistry Add-in (Chem4Word) 中解决此问题的方法是将 WPF 用户控件托管在 WinForms 控件中

WinForm
+- ElementHost
   +- WPF User Control

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM