WebBrowser控件打印预览和页面设置功能

WebBrowser控件是Windows应用程序中常用的一个组件,它提供了丰富的功能,比如打印预览。如果使用的是IE 5.5或更高版本,可能已经见过打印预览窗口。它是WebBrowser控件的一部分。如果使用过CHtmlView,也应该了解这个功能。可能已经注意到,这个预览窗口与传统的MFC打印预览没有关系。本文将向展示如何在WebBrowser控件中使用打印预览和页面设置功能。要求是安装了IE 5.5或更高版本。

添加打印预览功能

打印预览方法中,首先验证WebBrowser控件是否有效。然后,获取指向HTMLDocument的IDispatch接口指针,从中查询IOleCommandTarget接口,并将指针存储在lpTarget中。可以在MSDN上找到关于IOleCommandTarget接口的信息。不会在这里重复说明。最后,通过调用IOleCommandTarget::Exec方法并使用适当的参数来执行打印预览命令。命令ID OLECMDID_PRINTPREVIEW在"docobj.h"中定义。打印预览的GUI由WebBrowser控件处理。

以下是该方法的源代码:

void CWBPDlg::OnDemoPrintpreview() { // 验证WebBrowser控件是否有效 LPDISPATCH lpDispApp = m_wndBrowser.GetApplication(); if (lpDispApp) { // 获取HTMLDocument接口 LPDISPATCH lpDispDoc = m_wndBrowser.GetDocument(); if (lpDispDoc != NULL) { // 获取IOleCommandTarget接口以便分派命令 LPOLECOMMANDTARGET lpTarget = NULL; if (SUCCEEDED(lpDispDoc->QueryInterface(IID_IOleCommandTarget, (LPVOID*) &lpTarget))) { // 执行打印预览命令。控件将处理打印预览GUI。 // OLECMDID_PRINTPREVIEW在"docobj.h"中定义 lpTarget->Exec(NULL, OLECMDID_PRINTPREVIEW, 0, NULL, NULL); lpTarget->Release(); } lpDispDoc->Release(); } lpDispApp->Release(); } }

现在可以编译并运行应用程序。打印预览的GUI与在IE中看到的相同。

使用WebBrowser::ExecWB方法 - Alexander Tsarfin的贡献

WebBrowser类实现了一个包装器,允许使用IOleCommandTarget::Exec方法在OLE对象上执行命令。

void CWBPDlg::OnDemoPrintpreview() { m_wndBrowser.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_PROMPTUSER, NULL, NULL); }

添加页面设置

使用相同的模式,以下函数打开页面设置对话框:

void CWBPDlg::OnPagesetup() { m_wndBrowser.ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_PROMPTUSER, NULL, NULL); }

上述两种方法执行相同的工作——一种使用COM接口,另一种使用封装方法。如果进一步探索,会发现在docobj.h中定义了其他OLE命令ID。一旦获得了IOleCommandTarget接口,可以轻松地使用它们。这超出了本文的范围。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485