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