设为首页 加入收藏

TOP

在MFC应用程序中动态嵌入Word文档(三)
2012-11-04 15:12:28 来源: 作者: 【 】 浏览:622
Tags:MFC 应用程序 动态 嵌入 Word 文档
  保存Word文档

  虽然已经将Word环境嵌入到应用程序,Word文档也已经打开并显示,但如果使用向导生成的“保存”功能去保存当前打开的Word文档却只能保存一个空的文档。这是因为当前嵌入Word后的程序界面中的“文件”菜单是属于包容器程序的,在没有和Word建立关联前是无法执行文档保存功能的。在其命令响应函数中添加下述代码以完成对文档的保存:

// 显示打开文件对话框
CFileDialog fileDlg(FALSE, "*.doc", "*.doc", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Word文件(*.doc)|*.doc||", NULL);
if (fileDlg.DoModal() != IDOK)
 return;
CString sPath = fileDlg.GetPathName();
char cPath[256];
memset(cPath, 0, sizeof(cPath));
memcpy(cPath, sPath, sPath.GetLength());
WCHAR wPath[256];
memset(wPath, 0, sizeof(wPath));
MultiByteToWideChar(CP_ACP, MB_COMPOSITE, cPath, sPath.GetLength(), wPath, sizeof(wPath));
IDispatch *pOle = m_pSelection->GetIDispatch();
if (!pOle )
 return; // No ole document
IPersistFile *pPFile = NULL;
pOle->QueryInterface(IID_IPersistFile, (void**)&pPFile);
if (!pPFile)
{
 // 不支持IPersistFile接口
 if (pOle)
  pOle->Release();
 if (pPFile)
  pPFile->Release();
}
else
pPFile->Save(wPath, FALSE);

  这段代码的核心思想是通过使用IPersistFile接口的Save()方法完成对当前文档的保存。由于该方法第一个参数是一个LPOLESTR型变量,查看其宏定义可以知道该变量是一个指向宽字符缓冲区的指针,由CFileDialog类成员函数GetPathName()所返回的CString型文档路径不能直接使用,必须通过MultiByteToWideChar()函数将其内容转换到一个WCHAR型数组中。其第一个参数由CP_ACP指定为使用ANSI编码包,第二个参数设置为MB_COMPOSITE以指出一直使用复合字符。后面四个变量分别为源缓冲区的地址、大小和目的缓冲区的地址和大小。

  小结

  编译执行程序,当程序打开Word文档时将动态启动Word自动化服务,这时鼠标会处于等待状态,当鼠标恢复正常状态时,Word已经被嵌入到了程序中来,工具条和菜单上增添有许多属于Word的工具条和菜单,可以通过它们对Word文档提供完善的支持和服务。本程序在Windows 2000 Professional 下由Microsoft Visual C++(www.cppentry.com) 6.0编译通过。程序运行需要有Microsoft Word 97 或 Word 2000支持。
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇深入探讨MFC消息循环和消息泵 下一篇ADO与ODBC的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: