使用DOCHOSTUIFLAG_DPI_AWARE选择进入IE8模式缩放浏览器控件

时间:2011-09-19 20:24:08

标签: c# com internet-explorer-8 webbrowser-control

根据此http://msdn.microsoft.com/en-us/library/cc849094(v=vs.85).aspx#OptInHighDPI,您可以使您的Web浏览器控件使用IE8样式的缩放,而不是默认的IE7缩放。它表示在IDocHostUIHandler.GetHostInfo的实现中指定DOCHOSTUIFLAG_DPI_AWARE。

我已经看到了一些实现IDocHostUIHandler的C#应用​​程序示例,并在DocumentCompleted事件处理程序中调用ICustomDoc.SetUIHandler来连接,我已经编写了一个小测试应用程序。调用我的GetHostInfo实现,但IE8缩放不会立即生效。我看到它实际发生的唯一一次是在我移动鼠标/触摸键盘后我的Windows 7屏幕保护程序关闭之后。

这让我想到:

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

1 个答案:

答案 0 :(得分:0)

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

我们确定了一个非代码解决方案(我们,无论如何,对于浏览器控件),它设置了几个注册表值:

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

这些以及我们使用大字体Windows功能(120 DPI)的事实导致所有浏览器窗口和控件锁定为默认的125%缩放。

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