实现步骤
以下以Acrobat(Reader)5.x/6.x为例,介绍如何用新版控件实现PDF文件的显示。
运行VC,新建一个基于对话框的MFC应用程序ViewPDF,在设置生成选项时,选中“ActiveX Controls”,其余使用缺省值即可。生成后,删除对话框中的所有控件。
接下来创建自动化组件驱动类:打开类向导,点击“Add Class”按钮,在弹出的菜单中选择“From a type library”,用类型库文件pdf.tlb产生所需的组件类,该文件位于Acrobat软件安装目录下的ActiveX子目录。
编辑ViewPDFDlg.h,为类CViewPDFDlg添加两个数据成员:
#include "pdf.h" // 组件类的头文件 class CViewPDFDlg : public CDialog { protected: _DPdf m_drvPDF; // PDF组件驱动对象,_DPdf是我们刚生成的组件类 CWnd m_wndPDF; // PDF控件窗口 ... ... 在类成员函数CViewPDFDlg::OnInitDialog中插入下列语句:
// 为主窗口添加WS_CLIPCHILDREN风格,否则控件显示不正常 ModifyStyle(0, WS_CLIPCHILDREN); // 获取对话框的客户区矩形 CRect rt; GetClientRect(&rt); // 利用CWnd::CreateControl创建PDF控件窗口 // Acrobat (Reader) 5.x/6.x的控件类ID为"PDF.PdfCtrl.5",7.x为"AcroPDF.PDF.1" m_wndPDF.CreateControl("PDF.PdfCtrl.5", NULL, WS_CHILD | WS_VISIBLE, rt, this, 0); // 获取IDispatch接口指针 LPUNKNOWN lpUnknown = m_wndPDF.GetControl Unknown(); LPDISPATCH lpDispatch; lpUnknown->QueryInterface(IID_IDispatch, (void**)&lpDispatch); // 把获得的接口指针传递给组件驱动对象m_drvPDF,通过它调用控件的属性和方法 // 当m_drvPDF销毁时,会自动释放接口指针 m_drvPDF.AttachDispatch(lpDispatch); // 弹出一个“打开”对话框,选择要显示的PDF文件 CFileDialog dlg(TRUE); if (dlg.DoModal() == IDOK) // 利用控件的方法LoadFile读取并显示PDF文件 m_drvPDF.LoadFile(dlg.GetPathName()); else OnCancel(); // 退出 |