Я использую элемент управления 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), печать прерывается на полпути.
Таким образом, мой вопрос, как мне дождаться завершения печати, прежде чем я смогу разрешить закрытие окна хоста?