使用DOCHOSTUIFLAG_DPI_AWARE在浏览器控件中选择ie8模式缩放

本文关键字:选择 ie8 模式 缩放 控件 浏览器 DOCHOSTUIFLAG DPI AWARE 使用 | 更新日期: 2023-09-27 18:09:15

根据这个http://msdn.microsoft.com/en-us/library/cc849094(v=vs.85).aspx#OptInHighDPI,你可以让你的网页浏览器控件使用ie8风格的缩放,而不是默认的IE7缩放。它说在IDocHostUIHandler.GetHostInfo的实现中指定DOCHOSTUIFLAG_DPI_AWARE。

我看到了一些c#应用程序实现IDocHostUIHandler和调用ICustomDoc的例子。SetUIHandler在DocumentCompleted事件处理程序中连接起来,我沿着这些行编写了一个小测试应用程序。我的实现GetHostInfo被调用,但IE8缩放不会立即生效。我唯一一次看到这种情况发生是在我的Windows 7屏幕保护程序在我移动鼠标/触摸键盘后关闭后。

这让我想到:

  1. DocumentCompleted不是指定这个特定标志的正确事件(即有一个我不知道的适当事件)
  2. 在任何浏览器控件事件处理程序中使用SetUIHandler都将不起作用(即使用此处提到的IOleClientSite方法http://weborama.blogspot.com/2004/10/mshtml-hosting-idochostuihandler.html)

有人有使用DOCHOSTUIFLAG_DPI_AWARE的成功经验吗?

使用DOCHOSTUIFLAG_DPI_AWARE在浏览器控件中选择ie8模式缩放

我最终采用了IOleClientSite的方式,这在浏览器控件中触发了ie8风格的缩放。但是,子窗口仍然以100%缩放打开,而不是继承控件的125%设置。

我们选择了一个非代码解决方案(无论如何,我们为浏览器控件),即设置几个注册表值:

[HKEY_CURRENT_USER'Software'Microsoft'Internet Explorer'Zoom]
"ZoomDisabled"=dword:00000001
"ResetTextSizeOnStartup"=dword:00000001

这些,再加上我们使用的大字体Windows功能(120 DPI),导致所有浏览器窗口和控件锁定在默认的125%缩放。

一些web应用将需要更新,因为IE8缩放会影响所有HTML元素的大小(例如图片,样式宽度和高度),而不仅仅是像IE6和7那样的字体。