从WebBrowser控件打印时,如何等待IWebBrowser2 :: ExecWB()完成?

时间:2019-03-09 05:26:54

标签: c++ internet-explorer mfc com webbrowser-control

我在基于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控件所在的窗口),打印将中途中止。

因此,我的问题是,如何在允许关闭主机窗口之前等待打印完成?

0 个答案:

没有答案