Winapi 隐藏浏览器控件

Winapi 隐藏浏览器控件,winapi,iwebbrowser2,Winapi,Iwebbrowser2,我有一个Win32应用程序,它将HTML转换为图像而不显示控件。(我没有太多在Win32应用程序中使用ActiveX的经验) 我按照这篇MSDN文章创建控件并调用Navigate(): 当我需要转换图像时,我调用iviewbjec::Draw()。问题是,即使调用以下函数,控件也始终可见: browser->put_Visible(VARIANT_FALSE); // browser is IWebBrowser2 当我进入密码时,我发现当我打电话时 mOleObject->DoV

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

我按照这篇MSDN文章创建控件并调用
Navigate()

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

browser->put_Visible(VARIANT_FALSE); // browser is IWebBrowser2
当我进入密码时,我发现当我打电话时

mOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, mControlSite, 0, NULL, NULL)
控件立即可见。但从MSDN中我可以看到,
OLEIVERB\u INPLACEACTIVATE
的意思是

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

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

尝试调用
DoVerb()
作为
IOleObject
类型的实例(在您的例子中,
mOleObject
)并将
OLEIVERB\u hide
作为动词传递

更新:


ihtmlelementrenderer
界面将更好地解决这个问题(请参阅)。

我找到了另一个解决方案

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

在ControlSite中,我实现了IOleWindow::GetWindow(),以便像下面的代码一样放置控件(mWindow只是我的基本窗口类),只需返回这个普通窗口的句柄

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

谢谢你的回复。我试过了奥利弗·布吕隐藏,不会有窗口显示。但是我不能通过调用iviewbjec::Draw()来获得像素是的,我从一开始就尝试了这段代码,它还有其他问题。1.它使用MFC。2.结果不显示任何闪烁或闪烁和3。微软表示该功能已被弃用。4.我试图使用ATL模板类来显示put IWebBrowser控件,当我创建窗口时,我自己的主窗口突然变得不活动。