我在基于CDialog的MFC窗口中使用WebBrowser control。该窗口允许使用类似于以下的代码进行打印:
CComPtr<IWebBrowser2> pWebBrowser = this->GetIWebBrowser2();
if(pWebBrowser)
{
HRESULT hr;
COleVariant varNull;
if(SUCCEEDED(hr = pWebBrowser->ExecWB(
bDoPreview ? OLECMDID_PRINTPREVIEW : OLECMDID_PRINT,
OLECMDEXECOPT_PROMPTUSER, varNull, varNull)))
{
//All good
bRes = TRUE;
}
}
IWebBrowser2* GetIWebBrowser2()
{
IWebBrowser2* pBrowser = NULL;
LPUNKNOWN unknown = m_browser.GetControlUnknown();
if(unknown)
{
unknown->QueryInterface(IID_IWebBrowser2,(void **)&pBrowser);
if(unknown)
{
unknown->Release();
}
}
return pBrowser;
}
它起作用,除了如果文档足够大,pWebBrowser->ExecWB()
似乎立即返回并且所有打印都是异步进行的。因此,在这种情况下,如果用户关闭我的窗口(该WebBrowser控件所在的窗口),打印将中途中止。
因此,我的问题是,如何在允许关闭主机窗口之前等待打印完成?