科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件MFC应用程序中浏览PDF、Word文件

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍了一种在MFC应用程序中实现起来比较方便的浏览PDF、Word格式文档文件的方法。

作者:郎锐 来源:《CSDN开发高手》杂志 2007年10月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
文档的打开显示

  本程序在文件打开显示上采取的策略是:由程序框架负责获取需要打开的文件路径,并新建一文档。在视图更新“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浏览器”控件窗口的放置位置以使其能够占据尺寸更改后的文档窗口的全部客户区大小。

  小结


  上图展示了程序实际运行效果,不仅能够同时浏览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以上版本软件的支持。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章