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类实现了一个包装器,允许使用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接口,可以轻松地使用它们。这超出了本文的范围。