【问题标题】:Is there any way to draw Webbrowser content to a specific DC?有没有办法将 Webbrowser 内容绘制到特定的 DC?
【发布时间】:2010-12-29 08:24:56
【问题描述】:

这些天,我尝试在我的程序中创建一个隐藏的 WebBrowser 控件,并使用 IViewObject 接口绘制到我的自定义 DC。

结果很好,我得到了我想要的所有内容,但是Draw速度无法接受,尤其是一些包含Flash对象的复杂网页,每次Draw to DC花费超过100毫秒。所以我画的flash对象不流畅。

有没有一种快速的方法可以将控件绘制到我的特定 DC?

我的代码sinpet是这样的:

//hCompDc is a CompatibleDC which select a CompatibleBitmap.
RECTL imageRect = {0, 0, nWidth, nHeight};
pHtmlDocument2->QueryInterface(IID_IViewObject, (void **)&pViewObject);
pViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL, hCompDc, NULL, &imageRect, NULL, 0);

感谢您阅读此问题。

等待你的回答~

【问题讨论】:

  • 你想要完成什么?
  • @Daniel 我正在尝试顺利获取 WebBrowser 的内容,并将其绘制到其他位置,例如 DirectX 表面或 MemDC。如果我可以隐藏原来的浏览器 UI,那就更好了

标签: com winapi webbrowser-control gdi iwebbrowser2


【解决方案1】:

没有其他方法可以做到这一点。您使用的任何组件(IE、Flash 等)都不是为这种方式使用而设计的。如果绘制时间是一个问题,您必须在单独的线程上进行并同步。

【讨论】:

  • 我认为使用多线程可以帮助UI看起来更流畅,但是浏览器内容仍然不流畅?我想错了吗?
  • 我不确定我是否理解您的问题。
  • 我尝试创建一个线程调用 OleDraw 函数,但我不知道如何与 COM 接口同步。 “OleDraw”中的调用总是会引发异常。我只能使用 WM_PRINT 在单独的线程中执行此操作:(.
  • 当然是:),不过COM多线程我觉得更难,迷路了~
【解决方案2】:

试试这个: http://sourceforge.net/projects/wke/

char* buffer = new char[800*600*4];
IWebVeiw* webView = wkeCreateWebView("");    
webView->resize(800, 600);
webView->loadURL("www.google.com");
webView->paint(buffer, 0);
wkeDestroyWebView(webView);

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2020-07-28
    相关资源
    最近更新 更多