Windows窗体Web浏览器控件缩放级别

6
我正在使用一个网页浏览器控件在我的应用程序中显示一些即时生成的HTML文档。
问题是,在我的机器上,这些文档显示得有点放大。在其他同事的电脑上,一切都看起来“正常”。这必须是某种本地设置,但我找不到在哪里更改它。
我可以使用CTRL +滚轮缩小页面,但缩放级别不会被保留。据我所见,没有简单的方法通过编程方式设置预定义的缩放级别。
也许这是一个不太可能的想法,但我担心它与Internet Explorer(我从未使用过)及其设置有关。不幸的是,更改控件类型不是可行的选择。
非常感谢任何帮助。谢谢。

所以基本上你的意思是即使手动指定缩放比例,它也无法保持?你尝试过处理 DocumentCompleted 事件并应用 webBrowser1.Document.Body.Style = "zoom:200%"; 吗?希望能有所帮助。 - Gonzo345
你的机器上HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Zoom内部的属性与看起来“正常”的属性有什么区别吗? - Theo
Internet Explorer尊重Windows的比例设置。因此,在缩放为100的系统上看到的WebBrowser控件的大小与在缩放为150的系统上看到的WebBrowser控件的大小不同,而两个WebBrowser控件都设置为100%缩放。原因是由于缩放。缩放因子相同是Windows缩放因子除以100或physicalScreenHeight/logicalScreenHeight - Reza Aghaei
我正在慢慢地测试这里发布的所有内容,同时感谢大家的建议。 - ccalboni
4个回答

11
问题是,在我的电脑上,这些文档显示得有点放大。Internet Explorer会遵循Windows的缩放设置。因此,在缩放为100的系统上看到的WebBrowser控件的大小与在缩放为150的系统上看到的WebBrowser控件的大小不同,而两个WebBrowser控件都设置为100%缩放。原因是缩放。缩放因子等于Windows缩放因子除以100或physicalScreenHeight/logicalScreenHeight。实际上,有一种简单的方法可以以编程方式设置预定义的缩放级别。要更改Web Browser控件的缩放级别,您可以从WebBrowser.ActiveXInstance属性获取IWebBrowser2实例,然后使用其ExecWB方法设置缩放。
int OLECMDID_OPTICAL_ZOOM = 63;
int OLECMDEXECOPT_DONTPROMPTUSER = 2;
dynamic iwb2 = webBrowser1.ActiveXInstance;
object zoom = 200; //The value should be between 10 , 1000
iwb2.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, zoom, zoom);

你也可以添加对Microsoft Internet Controls (SHDocVw.dll)的引用,并将WebBrowser.ActiveXInstance转换为SHDocVw.WebBrowser,然后使用ExecWB方法。但是上述代码可以在不添加任何引用的情况下完成任务。
Web浏览器缩放与CSS3缩放完全不同。但是您可能想了解如何设置文档主体缩放:webBrowser1.Document.Body.Style = "zoom:200%"; 所有上述代码都应在文档完成后运行。

2
通过 ExexWB 进行缩放确实有效。我想知道这是否与我的第二个屏幕有关。我们的主屏幕是相同的,但如果 Windows 基于屏幕 #1 进行假设,那么这可能是问题所在。在 Windows 设置中,屏幕 #2 被标记为主屏幕。 - ccalboni
Internet Explorer 尊重 Windows 的缩放设置。每个屏幕都可以有自己的缩放设置。请检查 Windows 中该屏幕的缩放因子。 - Reza Aghaei
问题并没有完全解决,但是我至少能够通过使用ExecWB随意缩放控件。感谢大家的建议。 - ccalboni

3

问题出在屏幕分辨率上。你的屏幕分辨率比同事的低。

把你的屏幕分辨率改成和同事的一样或者反过来,这样问题就会解决了。

注意: 决定使用哪种分辨率完全取决于客户需求和期望。你可能还想在开始时设定正确的期望,以确保后续不会让客户失望。


1
同样的分辨率,同样的电脑和屏幕型号实际上是一样的。 - ccalboni

3

你的显示器是否进行了缩放?(假设您使用的是Windows 10,但旧版本应该非常相似)

桌面上右键点击鼠标,在菜单中选择“显示设置”,然后在“缩放和布局”下,检查您的缩放比例是否高于100%。


1
这是100,我的同事们也一样。 - ccalboni

2

这是Windows 10的问题,所有高分辨率设备都会自动调整到200%缩放级别。

要开始设置,请右键单击桌面上的任何空白区域,并选择上下文菜单底部的“显示设置”。或者,您可以进入“开始”>“设置”>“系统”>“显示”。 Windows 10中的“设置”应用程序已准备好按每个监视器显示比例进行缩放。

由于我有三个屏幕,它们的显示HDPI不同,因此没有适当的解决方法,我会自动获得200%的缩放。 因此,1个屏幕正常显示,而另外两个则被额外缩放。

window.onload = function() {
var currFFZoom = 1;
var currIEZoom = 100;

$('#In').on('click',function(){
    if (navigator.userAgent.indexOf('Firefox') != -1 && parseFloat(navigator.userAgent.substring(navigator.userAgent.indexOf('Firefox') + 8)) >= 3.6){//Firefox
        var step = 0.02;
        currFFZoom += step; 
        $('body').css('MozTransform','scale(' + currFFZoom + ')');
    } else {
        var step = 2;
        currIEZoom += step;
        $('body').css('zoom', ' ' + currIEZoom + '%');
    }
});

$('#Out').on('click',function(){
    if (navigator.userAgent.indexOf('Firefox') != -1 && parseFloat(navigator.userAgent.substring(navigator.userAgent.indexOf('Firefox') + 8)) >= 3.6){//Firefox
        var step = 0.02;
        currFFZoom -= step;                 
        $('body').css('MozTransform','scale(' + currFFZoom + ')');

    } else {
        var step = 2;
        currIEZoom -= step;
        $('body').css('zoom', ' ' + currIEZoom + '%');
    }
});};


<input type="button" id="Out" alt="Zoom Out"/>
<input type="button" id="In" alt="Zoom In"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接