隐藏WebBrowser控件

时间:2013-01-29 09:02:58

标签: winapi iwebbrowser2

我有一个Win32应用程序,可以将HTML转换为图像而不显示控件。 (我没有太多经验在Win32应用程序中使用ActiveX。)

我按照MSDN文章创建了控件并致电Navigate()http://msdn.microsoft.com/en-us/library/aa451946.aspx

当我需要转换图片时,我会调用IViewObjec::Draw()。问题是,即使我调用以下函数,控件也始终可见:

browser->put_Visible(VARIANT_FALSE); // browser is IWebBrowser2

当我进入代码时,我发现当我打电话时

mOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, mControlSite, 0, NULL, NULL)

控件立即可见。但从我从MSDN可以看到的是OLEIVERB_INPLACEACTIVATE意味着

  

激活对象,而不显示最终用户需要更改对象行为或外观的工具(如菜单和工具栏)。单击此类对象会使其与其容器协商其用户界面工具的显示。如果容器拒绝,则对象保持活动状态,但不显示其工具。

我有点困惑,我只想隐藏它。

2 个答案:

答案 0 :(得分:0)

尝试为DoVerb()类型的实例(在您的情况下为IOleObject)调用mOleObject,并将OLEIVERB_HIDE作为动词传递。

更新

IHTMLElementRender界面可以更好地解决问题(请参阅Capture an HTML document as an image)。

答案 1 :(得分:0)

我找到了另一个解决方案。

我只是制作普通窗口并将html控件放入窗口并隐藏它,这解决了我上面提到的所有问题。

在ControlSite中我实现了IOleWindow :: GetWindow()来控制如下面的代码(mWindow只是我的Basic窗口类),只需返回这个普通窗口的句柄。

HRESULT STDMETHODCALLTYPE GetWindow(/* [out] */ HWND __RPC_FAR* theWindow)
{   
    *theWindow = mWindow.GetHandle();
    return S_OK;    
}