0

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

我按照这篇 MSDN 文章创建控件并调用:http Navigate(): //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意味着

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

我有点迷茫,只想掩饰。

4

2 回答 2

1

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

更新:

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

于 2013-01-29T09:32:55.183 回答
0

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

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

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

HRESULT STDMETHODCALLTYPE GetWindow(/* [out] */ HWND __RPC_FAR* theWindow)
{   
    *theWindow = mWindow.GetHandle();
    return S_OK;    
}
于 2013-01-30T09:52:30.670 回答