WebBrowser 控件:如何进行打印预览






4.94/5 (19投票s)
2001 年 2 月 9 日

391917

4655
将 WebBrowser 控件插入到对话框中,并通过实现 IOleCommandTarget 接口向其添加打印预览功能。
引言
WebBrowser 控件广泛用于在 MFC 或 Windows Forms 应用程序中显示网页。该控件具有超出您想象的功能 - 例如,打印预览。如果您一直在使用 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() { // Verify the WebBrowser control is valid. LPDISPATCH lpDispApp = m_wndBrowser.GetApplication(); if(lpDispApp) { // Get the HTMLDocument interface. LPDISPATCH lpDispDoc = m_wndBrowser.GetDocument(); if (lpDispDoc != NULL) { // Get the IOleCommandTarget interface so that // we can dispatch the command. LPOLECOMMANDTARGET lpTarget = NULL; if (SUCCEEDED(lpDispDoc-> QueryInterface(IID_IOleCommandTarget, (LPVOID*) &lpTarget))) { // Execute the print preview command. The // control will handle the print preview // GUI. // OLECMDID_PRINTPREVIEW is defined in // "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
接口,您就可以轻松地使用它们。这超出了本文的范围。
修订历史
- 2002 年 6 月 26 日 - 重新格式化代码以防止滚动。
- 2005 年 3 月 20 日 - 添加了页面设置对话框。