C/C++ codeHRESULT hr = S_OK;
CComPtr spbodyelement;
// this_class 继承自 CDHtmlDialog
VERIFY(SUCCEEDED(hr = m_spHtmlDoc->get_body(&spbodyelement)));
CComPtr spbody2;
VERIFY(SUCCEEDED(hr = spbodyelement->QueryInterface(IID_IHTMLElement2, (void**)&spbody2)));
CComPtr spviewobj;
VERIFY(SUCCEEDED(hr = m_spHtmlDoc->QueryInterface(IID_IViewObject, (void**)&spviewobj)));
// 网页大小
// 遇到不规范的html数据就无法得到实际值
CRect rcthtml;
rcthtml.left = rcthtml.top = 0;
VERIFY(SUCCEEDED(hr = spbody2->get_scrollWidth(&rcthtml.right)));
VERIFY(SUCCEEDED(hr = spbody2->get_scrollHeight(&rcthtml.bottom)));
MoveWindow(rcthtml);
if (m_deqPrintTask.empty())
{
return;
}
const boost::shared_ptr<_printtask>& spprinttask = m_deqPrintTask.front();
ASSERT(spprinttask);
// cdcPrinter是CDC类型的,已经初始化并用DEVMODE ResetDC过了
// 取得打印纸大小
CRect rctdev(0, 0,
spprinttask->cdcPrinter.GetDeviceCaps(HORZRES),
spprinttask->cdcPrinter.GetDeviceCaps(VERTRES));
spprinttask->cdcPrinter.StartDoc(_T("HTML print"));
spprinttask->cdcPrinter.StartPage();
// 这里 hr 始终是 S_OK ,但遇到不规范的html格式就无法绘制到打印机
VERIFY(SUCCEEDED(hr = OleDraw(m_spHtmlDoc,
DVASPECT_CONTENT,
spprinttask->cdcPrinter,
rctdev)));
spprinttask->cdcPrinter.EndPage();
spprinttask->cdcPrinter.EndDoc();