MFC应用程序中浏览PDF、Word文件

2016-02-19 12:58 55 1 收藏

下面图老师小编要向大家介绍下MFC应用程序中浏览PDF、Word文件,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

【 tulaoshi.com - 编程语言 】

  摘要: 本文主要介绍了一种在MFC应用程序中实现起来比较方便的浏览PDF、Word格式文档文件的方法,同时给出了具体的编程步骤和较详细的实现代码。

  概述

  随着网络技术的迅速发展,越来越多的电子图书资料能够更加方便的从网上被检索、下载。其文件格式也不仅限于HTML格式的Web页,PDF、Word等多种格式也逐渐成为网络资料交换的主流文件格式。尤其在一些科研、技术类网站,有相当数量的科技文献都是以上述格式来发布的,而且从传统习惯上大多数科研人员也更倾向于阅读PDF或Word格式的文献资料。

  虽然使用Acrobat Reader和Word等专用软件能够比较方便的阅读上述格式的资料文件,但如果需要在自己编写的应用程序中打开上述格式文档仍免不了自己动手进行处理。有多种途径可以实现此目的:通过创建子进程直接调用外部Acrobat Reader或Word应用程序打开指定文档;使用COM自动化技术在应用程序中嵌入Acrobat Reader或Word而打开指定文档;使用合适的ActiveX控件等等。其中,第一种方法是在应用程序之外打开文档,会使程序显的不是很“专业”,第二种方法同样会在打开文档而使嵌入对象处于现场激活状态时将Acrobat Reader或Word程序控制菜单嵌入到自己的程序当中,而在许多情况下这并不是我们所希望的。本文将针对最后一种方式,即通过对“Microsoft Web浏览器”ActiveX控件的使用而在应用程序中完成对PDF、Word格式文档文件的打开、显示。当用户用以该方法编写的应用程序在打开这些格式文档文件时将不再感觉是在Acrobat Reader或Word程序中的浏览。

  控件的创建

  “Microsoft Web浏览器”控件随Visual C++开发环境一起安装到系统。从“Project”菜单下“Add To Project”弹出菜单的“Components and Controls…”子菜单弹出“Components and Controls Gallery”对话框,进入“Registered ActiveX Controls”目录并选中“Microsoft Web浏览器”控件,点击“Insert”按钮将其添加到VC++开发环境的控件工具栏中。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  通常对ActiveX控件的使用多是在资源视图中将指定的ActiveX控件拖拽到相应的对话框中,并完成对其属性的设置和对事件处理函数的添加。但由于本程序应用“Microsoft Web浏览器”控件的目的是为了浏览PDF和Word等格式的文档,因此应用程序框架采取多文档视图结构比较合适,在这种情况下显然不能再以传统方式创建控件而应通过代码来完成动态创建。

  在将 “Microsoft Web浏览器”控件插入到工程后,派生于CWnd类的CWebBrowser2类被添加到工程,它提供了一个可供重载使用的虚函数Create()和一个类成员函数Create():

virtual BOOL Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd, UINT nID,CCreateContext* pContext = NULL);
BOOL Create(LPCTSTR lpszWindowName,DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL);

  通过该函数将可以象动态创建编辑框、按钮等标准控件一样动态创建。这里需要特别指出的是,一个“Microsoft Web浏览器”控件只能负责对一个文档的维护,也就是说,在多文档结构的本程序中需要为每一个打开的文档分配一个“Microsoft Web浏览器”控件以进行管理。这在具体实施上,只需在文档或视图类中声明CWebBrowser2类对象即可。下面这段代码在视图类完成,在OnInitialUpdate()函数更新视图时完成对控件的动态创建,创建的控件将占据视图的全部客户区:

CWebBrowser2 m_Web;
……
// 得到客户区
CRect rect;
GetClientRect(&rect);
// 创建控件窗体
m_Web.Create(NULL, WS_CHILD | WS_VISIBLE, rect, this, ID_WORD);

文档的打开显示

  本程序在文件打开显示上采取的策略是:由程序框架负责获取需要打开的文件路径,并新建一文档。在视图更新“Microsoft Web浏览器”控件创建完毕后,由CWebBrowser2类成员函数Navigate ()负责对具体文档的维护管理。这部分工作的具体处理代码如下:

// 主框架类:
// 显示打开文件对话框
CFileDialog fileDlg(TRUE, "*.doc", "*.doc", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Word文件(*.doc)|*.doc|PDF文件(*.pdf)|*.pdf|Web页(*.htm)|*.htm|所有文件(*.*)|*.*||", NULL);
if (fileDlg.DoModal() == IDOK)
{
 // 得到文件路径
 m_sPath = fileDlg.GetPathName();
 // 新建文档
 PostMessage(WM_COMMAND, ID_FILE_NEW, 0);
}
……

// 视图类:
// 得到并保存要打开的文件路径
m_sFilePath = ((CMainFrame*)AfxGetApp()-〉GetMainWnd())-〉m_sPath;
((CMainFrame*)AfxGetApp()-〉GetMainWnd())-〉m_sPath = "about:blank";
// 打开指定的文件
m_Web.Navigate(m_sFilePath, NULL, NULL, NULL, NULL);
// 窗体设置为大小可变
m_Web.SetResizable(TRUE);

  为了在刷新视图或窗口尺寸变更时能够即使刷新显示,还需要在OnDraw()函数和WM_SIZE消息响应函数OnSize()中添加额外的处理代码:

// 重绘窗口 (OnDraw()函数)
if (m_Web.m_hWnd != NULL)
m_Web.RedrawWindow();
……
void CShowWordView::OnSize(UINT nType, int cx, int cy)
{
 CView::OnSize(nType, cx, cy);
 if (m_Web.m_hWnd != NULL)
 {
  // 得到新的客户区
  CRect rect;
  GetClientRect(&rect);
  // 设置新的窗口位置
  m_Web.SetWindowPos(&wndTop, rect.left, rect.top, rect.Width(), rect.Height(), NULL);
  // 重绘窗体
  m_Web.RedrawWindow();
 }
}

  其中,SetWindowPos()函数将重新设置“Microsoft Web浏览器”控件窗口的放置位置以使其能够占据尺寸更改后的文档窗口的全部客户区大小。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  小结

MFC应用程序中浏览PDF、Word文件

  上图展示了程序实际运行效果,不仅能够同时浏览Word格式文档和PDF文档,还能够同时打开、并列显示多个PDF文档(在Acrobat Reader中虽然能够同时打开多个文档但不能并列显示)。此外,本文虽然论述的是PDF和Word格式文档文件的打开,但由于实际是通过CWebBrowser2类来完成具体的文档打开和显示处理的,因此支持的文档格式并不局限于PDF和Word格式,只要符合IE接口规范的任意一种文件格式如HTML、JPEG等,使用本文所述方法同样能够将其打开、显示。本文所述程序在Windows 2000 Professional下由Microsoft Visual C++ 6.0编译运行通过。需要有Microsoft Word 2000和Acrobat Reader 5.0以上版本软件的支持。

来源:https://www.tulaoshi.com/n/20160219/1602632.html

延伸阅读
标签: 电脑入门
MAC OS X系统有着强大的系统内置应用,这些应用可以帮助我们解决许多问题,不过从便捷的程度来看,Mac App Store 里的应用,也是有着其自身的优势的,比如打开文件,Mac App Store 中便有许多更便捷的应用,比如使用Skitch(也就是印象笔记的圈点应用)来打开gif文件、可以用Pixelmator来打开png图片、可以用The Unarchiver来解压zip文件压缩包...
标签: PHP
一、 XML简介 XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互、数据的存储与使用。 使用XML标准编码的数据具有能容易被人和计算机解释的意义和结构。XML数据是平台和应用程序独立的。不用多说,这本身就使XML成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途...
标签: Web开发
始      首先我们从一个简单的XML文档开始。现在来看看我们最初的演示文档--CD 目录:          ?xml version="1.0"?    CATALOG    CD    TITLEEmpire Burlesque /TITLE    ARTISTBob Dylan /ARTIST &nb...
内容: 一.下载并安装Easy Struts包二.配置和开发struts应用项目三.总结参考资料关于作者 相关内容: TCP/IP 介绍TCP/IP 介绍 -- Java 专区中还有: 教学工具与产品代码与组件所有文章实用技巧 刘冬 (winter.lau@163.com) 珠海市创我科技发展有限公司软件工程师 2003 年 7 月 一. 下载并安装Easy Struts包 1. Easy ...
为了方便用户使用和使系统具有灵活性,大多数Win-dows应用程序将用户所做的选择以及各种变化的系统信息记录在初始化(INI)文件中。因此,当系统的环境发生变化时,可以直接修改INI文件,而无需修改程序。由此可见,INI文件对系统功能是至关重要的。本文将介绍采用VisualBasicforWindows(下称VB)开发Windows应用程序时如何读写INI文件。 ...

经验教程

779

收藏

69
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部