Как ожидать завершения IWebBrowser2 :: ExecWB () при печати из элемента управления WebBrowser? - PullRequest
1 голос
/ 09 марта 2019

Я использую элемент управления WebBrowser в моем окне MFC на основе CDialog.Окно позволяет печатать, используя код, подобный следующему:

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), печать прерывается на полпути.

Таким образом, мой вопрос, как мне дождаться завершения печати, прежде чем я смогу разрешить закрытие окна хоста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...