将 webbrowser 控件渲染到屏幕外(或隐藏)

Posted

技术标签:

【中文标题】将 webbrowser 控件渲染到屏幕外(或隐藏)【英文标题】:Render webbrowser control offscreen (or hidden) 【发布时间】:2010-02-21 01:39:06 【问题描述】:

我有一个嵌入 webbrowser 控件的小型应用程序。在那个应用程序中,我创建了一个弹出类。此弹出窗口用于显示服务器生成的错误消息。

我希望能够调整弹出窗口的大小以适应消息。这样一来,短消息不包含在过大的表单中,而大消息不包含在过小的表单中。

我想即时计算尺寸,而不是发送宽度和高度。我也不想明显地调整表单的大小,那太丑了。

我尝试的一切都失败了:(

这是我认为应该起作用的

create the form
move it offscreen by setting its left position to -1000
show the form (offscreen)
write the contents to the webrowser ctl
get the width and height after it renders
hide the form
resize the form to fit the above width and height
center it onscreen
show the form

这应该很好用,除了 webbrowser 控件拒绝呈现,因此我无法获取客户端宽度和高度

有谁知道如何做到这一点?

直流

【问题讨论】:

你能告诉我们你的源代码吗? 我必须建立一个模拟应用程序,当前的应用程序使用了很多遗留代码,只会造成更多的混乱。至少你不是说它不能这样做,所以它本身就是一件好事:) 【参考方案1】:

我已经解决了我遇到的问题。这是一个时机。

问题是我正在将内容写入 webbrowser 控件。然后尝试读取宽度和高度。但是控件没有渲染,所以我没有得到这些参数。

我在文章的早期就意识到了这一点,因此我将调整大小代码放在了 ondocumentcomplete 事件中。遗憾的是,我没有意识到当您直接写入文档时不会调用此事件。不知何故,我设法说服自己它没有被调用,因为控件被隐藏了。事实并非如此。

所以一旦我设法弄清楚这一点,我就在调用 write 函数和调用 show 函数之前放入了一个消息泵。消息泵循环直到控件返回完成(检查 readystate 标志)

PopUp->Write(text.c_str());
while (!PopUp->Complete() && ProcessMessages()) ; 
popup_ctlDownloadComplete(0);

现在,当手动调用 DownloadComplete 事件时,文档已呈现,我可以获取宽度和高度。

如果出现错误,上面的代码可能会导致无限循环,因此我添加了一个计数器以在发生这种情况时将其终止。只是为了简洁明了而没有显示。

哦,代码是遗留代码而不是托管代码

直流

【讨论】:

以上是关于将 webbrowser 控件渲染到屏幕外(或隐藏)的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?

VB.Net / VB 如何隐藏 WebBrowser 控件 中之滚动

WebBrowser 控件不呈现某些页面

将 SwiftUI 视图渲染到屏幕外并将视图另存为 UIImage 以共享

DELPHI如何实现打开某一个网页没webbrowser组件

wpf中我想在WebBrowser控件上放置一个Border控件