日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

如何使用MFC和类型库创建自动化项目

發(fā)布時(shí)間:2025/7/14 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用MFC和类型库创建自动化项目 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要

本文詳細(xì)介紹了如何自動(dòng)化像Microsoft Office這樣支持COM的應(yīng)用程序。

更多信息

下面部分介紹了如何創(chuàng)建MFC項(xiàng)目。采用Microsoft Excel舉例,你可以將前8個(gè)步驟用于任何項(xiàng)目,修改9-15步用于不同的應(yīng)用程序。

創(chuàng)建自動(dòng)化項(xiàng)目

1.在Microsoft Developer Studio中,創(chuàng)建"MFC AppWizard(exe)"項(xiàng)目,命名為"AutoProject."
2.在第1步的MFC應(yīng)用程序向?qū)е?#xff0c;選擇"Dialog Based"應(yīng)用程序類型并點(diǎn)"完成"
在創(chuàng)建的項(xiàng)目信息對(duì)話框中將顯示創(chuàng)建的類: Application: CAutoProjectApp in AutoProject.h and AutoProject.cpp Dialog: CAutoProjectDlg in AutoProject.h and AutoProjectDlg.cpp 點(diǎn) OK 完成項(xiàng)目創(chuàng)建。
3.Visual Studio設(shè)計(jì)編輯區(qū)打開(kāi)了對(duì)話框"IDD_AUTOPROJECT_DIALOG" ,依照下面兩步修改它。
4.刪除靜態(tài)控件(IDC_STATIC)和Cancel按鈕(IDCANCEL)
5.將OK按鈕改為"IDRUN",說(shuō)明改為"Run." 關(guān)閉AutoProject.rc對(duì)話框設(shè)計(jì)界面。
6.點(diǎn)View菜單中的ClassWizard(或按CTRL+W)
7.選擇消息映射(Message Maps)標(biāo)簽,在對(duì)象ID列表框中選擇IDRUN,在消息列表框中選擇"BN_CLICKED",點(diǎn)添加函數(shù)并命名為"OnRun",點(diǎn)OK關(guān)閉ClassWizard

提示:此步驟在AutoProjectDLG.h中定義了"OnRun();"函數(shù),并在 AutoProjectDLG.cpp 中添加了消息處理函數(shù)CAutoProjectDlg::OnRun()。
8.點(diǎn)View菜單中的ClassWizard(或按CTRL+W)
9.選擇Automation標(biāo)簽,點(diǎn)Add Class并選擇"From a type library" 瀏覽并選擇你希望自動(dòng)化的對(duì)象庫(kù)(例如,如果你自動(dòng)化Excel 97, 則選擇Microsoft Excel 8.0 對(duì)象庫(kù),默認(rèn)位于 C:\Program Files\Microsoft Office\Office\Excel8.olb).

如果你自動(dòng)化Microsoft Excel 2000,選擇位于 C:\Program Files\Microsoft Office\Office\Excel9.olb 的Microsoft Excel 9.0 對(duì)象庫(kù)。

如果你自動(dòng)化Microsoft Excel 2002和Microsoft Office Excel 2003 ,對(duì)象庫(kù)內(nèi)含在Excel.exe中,Office 2002的Excel.exe 默認(rèn)位于 C:\program Files\Microsoft Office\Office10\Excel.exe, Office 2003的Excel.exe 默認(rèn)位于 C:\program Files\Microsoft Office\Office11\Excel.exe 。選擇合適的對(duì)象庫(kù)后,點(diǎn)Open,在類確認(rèn)列表中選擇所有類,點(diǎn)OK。

提示:類確認(rèn)對(duì)話框中的列表框里包含了Microsoft Excel 類型庫(kù)中的所有IDispatch接口(與類中一致)。在對(duì)話框下面可以看到命名為Excel8.cpp的執(zhí)行文件,該文件包含了從COleDispatchDriver派生的封裝類,頭文件是Excel8.h(對(duì)于Excel 2002和Excel 2003,文件名為Excel.cpp和Excel.h)
10.點(diǎn)OK關(guān)閉MFC ClassWizard對(duì)話框
11.在 CAutoProjectApp::InitInstance() 函數(shù)中添加如下代碼,用于加載COM支持庫(kù): BOOL CAutoProjectApp::InitInstance() {if(!AfxOleInit()) // Your addition starts here{AfxMessageBox("Could not initialize COM dll");return FALSE;} // End of your additionAfxEnableControlContainer();...}
12.在AutoProject.cpp頂部添加#include行 #include <afxdisp.h>
13.在AutoProjectDlg.cpp 頂部stdafx.h下添加對(duì)excel8.h的包含 #include "stdafx.h" #include "excel8.h" // excel.h in the case of Excel 2002 and Excel 2003.
14.在CAutoProjectDlg::OnRun()中添加如下所示的自動(dòng)化代碼 void CAutoProjectDlg::OnRun() {_Application app; // app 是 Excel _Application 對(duì)象// 啟動(dòng) Excel 并得到應(yīng)用程序?qū)ο骾f(!app.CreateDispatch("Excel.Application")){AfxMessageBox("Couldn''t start Excel.");}else{//使 Excel 可視,然后顯示消息app.SetVisible(TRUE);AfxMessageBox ("Excel is Running!");} }
15.編譯并運(yùn)行項(xiàng)目。運(yùn)行結(jié)果:當(dāng)你點(diǎn)擊對(duì)話框中的Run按鈕,Microsoft Excel將被調(diào)用。關(guān)閉消息框使Auto_Excel對(duì)話框激活。CAutoProjectDlg::OnRun()函數(shù)結(jié)束,application變量離開(kāi)作用域,Microsoft Excel將退出。

附加說(shuō)明

當(dāng)你在項(xiàng)目中從類型庫(kù)添加類(根據(jù)上面所說(shuō)的9個(gè)步驟),你將注意到在項(xiàng)目中添加了許多類。在ClassView中你可以雙擊某個(gè)類查看該類在Excel8.cpp中的定義。

如果你需要驗(yàn)證返回值或改變函數(shù)的執(zhí)行,你需要得到函數(shù)的定義,無(wú)論何時(shí)當(dāng)你改變函數(shù)定義,記住在Excel8.h中修改定義。當(dāng)你這樣做的時(shí)候,請(qǐng)確認(rèn)你改變的是正確的函數(shù)定義;有時(shí)多個(gè)類中包含了相同名字的函數(shù),例如GetApplication。

通過(guò)以上如何自動(dòng)化Microsoft Excel的講述,你可以將這些方法應(yīng)用到其它自動(dòng)化程序中。下表包含了Microsoft Office應(yīng)用程序類型庫(kù)的名稱。

應(yīng)用程序(Application) 類型庫(kù)(Type Library)--------------------------------------------------------Microsoft Access 97 Msacc8.olbMicrosoft Jet Database 3.5 DAO350.dllMicrosoft Binder 97 Msbdr8.olbMicrosoft Excel 97 Excel8.olbMicrosoft Graph 97 Graph8.olbMicrosoft Office 97 Mso97.dllMicrosoft Outlook 97 Msoutl97.olbMicrosoft PowerPoint 97 Msppt8.olbMicrosoft Word 97 Msword8.olbMicrosoft Access 2000 Msacc9.olbMicrosoft Jet Database 3.51 DAO360.dllMicrosoft Binder 2000 Msbdr9.olbMicrosoft Excel 2000 Excel9.olbMicrosoft Graph 2000 Graph9.olbMicrosoft Office 2000 Mso9.dllMicrosoft Outlook 2000 Msoutl9.olbMicrosoft PowerPoint 2000 Msppt9.olbMicrosoft Word 2000 Msword9.olbMicrosoft Access 2002 Msacc.olbMicrosoft Excel 2002 Excel.exeMicrosoft Graph 2002 Graph.exeMicrosoft Office 2002 MSO.dllMicrosoft Outlook 2002 MSOutl.olbMicrosoft PowerPoint 2002 MSPpt.olbMicrosoft Word 2002 MSWord.olbMicrosoft Office Access 2003 Msacc.olbMicrosoft Office Excel 2003 Excel.exeMicrosoft Graph 2003 Graph.exeMicrosoft Office 2003 MSO.dllMicrosoft Office Outlook 2003 MSOutl.olbMicrosoft Office PowerPoint 2003 MSPpt.olbMicrosoft Office Word 2003 MSWord.olb

提示:除了 Dao350.dll 、Dao360.dll和 Microsoft Office 10(MSO.dll),類型庫(kù)默認(rèn)位于: C:\Program Files\Microsoft Office\Office (Office 2002 路徑是 C:\...\Office10,Office 2003 路徑是 C:\...\Office11), Dao350.dll/Dao360.dll 默認(rèn)位于 C:\Program Files\Common Files\Microsoft Shared\Dao。 Office 2002 的MSO.dll 默認(rèn) C:\Program Files\Common Files\Microsoft Shared\Office10, Office 2003 的MSO.dll位于 C:\Program Files\Common Files\Microsoft Shared\Office11
==========================================================================================

Excel

1. 引入類

#include "CApplication.h"
#include "CFont0.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CRange.h"
#include "CWorksheet.h"
#include "CWorksheets.h"

2. 主要接口

BOOL CXXX::Create(void)
{
??? if(!m_app.CreateDispatch(L"Excel.Application"))
?? {
?????? AfxMessageBox(L"Could not start Excel.");
????? return FALSE;
?? }
?? m_app.put_DisplayAlerts (VARIANT_FALSE);
?? m_app.put_UserControl(FALSE);
?? return TRUE;
}

void CXXX::Destroy(void)
{
???? //CloseWorkbook();
???? m_app.Quit();
???? m_app.ReleaseDispatch();
}

int CXXX::OpenWorkbook(CString strPath)
{
??? try
??? {
???????? LPDISPATCH lpDisp;
???????? lpDisp = m_app.get_Workbooks();? // Get an IDispatch pointer
???????? ASSERT(lpDisp);
???????? m_books.AttachDispatch( lpDisp );? // Attach the IDispatch pointer to the books object.

???????? // open the document

???????? lpDisp = m_books.Open(strPath,???? m_covOptional, m_covOptional,
????????? m_covOptional, m_covOptional, m_covOptional, m_covOptional,
????????? m_covOptional, m_covOptional, m_covOptional, m_covOptional,
????????? m_covOptional, m_covOptional, m_covOptional, m_covOptional);
???????? ASSERT(lpDisp);

???????? //Set CWorkbook to use lpDisp, the IDispatch* of the actual workbook.
?????? ? m_book.AttachDispatch(lpDisp);?
???????? m_sheets = m_book.get_Worksheets();
??? }
??? catch(COleDispatchException* e)
??? {
??????? TRACE(_T("[EXCEPTION]OpenWorkbook exception COleDispatchException!!!\n"));
??????? TCHAR msg[2048];
??????? e->GetErrorMessage(msg,1024);
??????? e->Delete();
??????? MessageBox(0,msg, TEXT("Error"), MB_OK | MB_ICONERROR);
??????? return -1;
???? }
???? return 0;
}

?void Cxxxx::CloseWorkbook(void)
{
????m_sheet.ReleaseDispatch();
  m_sheets.ReleaseDispatch();
  m_book.ReleaseDispatch();
  m_books.Close();
  m_books.ReleaseDispatch();
}


int CXXX::ReaddExcelData(CString strPath)
{
  if( -1 == OpenWorkbook(strPath) )
  {
    CloseWorkbook();
    return -1;
  }

  if ( !ParseCauSheet() )
  {
    CloseWorkbook();
    return -1;
  }

  CloseWorkbook();
  return 0;
}

void CExcelOp::ParseSheet(void)
{
????CRange range;
  CRange usedRange;
  COleVariant val;
  CString strRangeId,strKeyword;
  CString strRangePos;
  int index = 0;

  m_sheet = m_sheets.get_Item(COleVariant((short)(1))); // m_sheets are indexed starting from 1
  usedRange = m_sheet.get_UsedRange();
  range = usedRange.get_Rows();
  int nRowCnt = (int)range.get_Count();
  for(int i = 1; i <= nRowCnt; i++)
  {

      。。。。。
  }
  return;
}

總結(jié)

以上是生活随笔為你收集整理的如何使用MFC和类型库创建自动化项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。