我有一个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
意味着
激活对象,而不显示最终用户需要更改对象行为或外观的工具(如菜单和工具栏)。单击此类对象会使其与其容器协商其用户界面工具的显示。如果容器拒绝,则对象保持活动状态,但不显示其工具。
我有点困惑,我只想隐藏它。
答案 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;
}