Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1992765
  • 博文数量: 950
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 13070
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-04 09:23
文章分类

全部博文(950)

文章存档

2011年(1)

2008年(949)

我的朋友

分类: C/C++

2008-08-04 09:34:43

下载本文示例代码
摘要

本文详细介绍了如何自动化像Microsoft Office这样支持COM的应用程序。

更多信息

下面部分介绍了如何创建MFC项目。采用Microsoft Excel举例,你可以将前8个步骤用于任何项目,修改9-15步用于不同的应用程序。

创建自动化项目

下载本文示例代码
1. 在Microsoft Developer Studio中,创建"MFC AppWizard(exe)"项目,命名为"AutoProject."
2. 在第1步的MFC应用程序向导中,选择"Dialog Based"应用程序类型并点"完成"
在创建的项目信息对话框中将显示创建的类:
Application: CAutoProjectApp in AutoProject.h and AutoProject.cpp

Dialog: CAutoProjectDlg in AutoProject.h and AutoProjectDlg.cpp
点 OK 完成项目创建。
3. Visual Studio设计编辑区打开了对话框"IDD_AUTOPROJECT_DIALOG" ,依照下面两步修改它。
4. 删除静态控件(IDC_STATIC)和Cancel按钮(IDCANCEL)
5. 将OK按钮改为"IDRUN",说明改为"Run." 关闭AutoProject.rc对话框设计界面。
6. 点View菜单中的ClassWizard(或按CTRL W)
7. 选择消息映射(Message Maps)标签,在对象ID列表框中选择IDRUN,在消息列表框中选择"BN_CLICKED",点添加函数并命名为"OnRun",点OK关闭ClassWizard

提示:此步骤在AutoProjectDLG.h中定义了"OnRun();"函数,并在 AutoProjectDLG.cpp 中添加了消息处理函数CAutoProjectDlg::OnRun()。
8. 点View菜单中的ClassWizard(或按CTRL W)
9. 选择Automation标签,点Add Class并选择"From a type library" 浏览并选择你希望自动化的对象库(例如,如果你自动化Excel 97, 则选择Microsoft Excel 8.0 对象库,默认位于 C:\Program Files\Microsoft Office\Office\Excel8.olb).

如果你自动化Microsoft Excel 2000,选择位于 C:\Program Files\Microsoft Office\Office\Excel9.olb 的Microsoft Excel 9.0 对象库。

如果你自动化Microsoft Excel 2002和Microsoft Office Excel 2003 ,对象库内含在Excel.exe中,Office 2002的Excel.exe 默认位于 C:\program Files\Microsoft Office\Office10\Excel.exe, Office 2003的Excel.exe 默认位于 C:\program Files\Microsoft Office\Office11\Excel.exe 。选择合适的对象库后,点Open,在类确认列表中选择所有类,点OK。

提示:类确认对话框中的列表框里包含了Microsoft Excel 类型库中的所有IDispatch接口(与类中一致)。在对话框下面可以看到命名为Excel8.cpp的执行文件,该文件包含了从COleDispatchDriver派生的封装类,头文件是Excel8.h(对于Excel 2002和Excel 2003,文件名为Excel.cpp和Excel.h)
10. 点OK关闭MFC ClassWizard对话框
11. 在 CAutoProjectApp::InitInstance() 函数中添加如下代码,用于加载COM支持库:
BOOL CAutoProjectApp::InitInstance()

{

      if(!AfxOleInit())  // Your addition starts here

      {

            AfxMessageBox("Could not initialize COM dll");

            return FALSE;

      }     // End of your addition



      AfxEnableControlContainer();

      .

      .

      .



}
12. 在AutoProject.cpp顶部添加#include行
#include 
13. 在AutoProjectDlg.cpp 顶部stdafx.h下添加对excel8.h的包含
#include "stdafx.h"

#include "excel8.h" // excel.h in the case of Excel 2002 and Excel 2003.
14. 在CAutoProjectDlg::OnRun()中添加如下所示的自动化代码
void CAutoProjectDlg::OnRun()

{

      _Application app;  // app 是 Excel _Application 对象



      // 启动 Excel 并得到应用程序对象

      if(!app.CreateDispatch("Excel.Application"))

      {

          AfxMessageBox("Couldn''t start Excel.");

      }

      else

      {

          //使 Excel 可视,然后显示消息

          app.SetVisible(TRUE);

          AfxMessageBox ("Excel is Running!");

      }

}
15. 编译并运行项目。运行结果:当你点击对话框中的Run按钮,Microsoft Excel将被调用。关闭消息框使Auto_Excel对话框激活。CAutoProjectDlg::OnRun()函数结束,application变量离开作用域,Microsoft Excel将退出。
阅读(393) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~