程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 應用VS2010創立MFC ActiveX工程項目

應用VS2010創立MFC ActiveX工程項目

編輯:關於C++

應用VS2010創立MFC ActiveX工程項目。本站提示廣大學習愛好者:(應用VS2010創立MFC ActiveX工程項目)文章只能為提供參考,不一定能成為您想要的結果。以下是應用VS2010創立MFC ActiveX工程項目正文


1.ActiveX的根本概念

ActiveX控件可以看做是一個極小的辦事器運用法式,它不克不及自力運轉,必需嵌入到某個容器法式中,與該容器一路運轉。這個容器包含WEB網頁,運用法式窗體等。。。

ActiveX控件的後綴名是OCX或許DLL。普通是以OCX和靜態庫共存的情勢打包成cab或許exe的文件放在辦事器上,客戶端下載後運轉裝置cab或exe解壓成OCX和靜態庫共存的文件,然後注冊ocx文件。

ActiveX控件是基於com尺度,使得軟件部件在收集情況中停止交互的技巧集。它與詳細的編程說話有關。作為針對Internet運用開辟的技巧,ActiveX被普遍運用於WEB辦事器和客戶真個各個方面。同時,ActiveX技巧也被用於便利地創立通俗的桌面運用法式,另外ActiveX普通具有界面。

2.三個概念:ActiveX、OLE和COM

從時光的角度講,OLE是最早湧現的,然後是COM和 ActiveX;從系統構造角度講,OLE和ActiveX是樹立在COM之上的,所以COM是基本;單從稱號角度講,OLE、ActiveX是兩個商標稱號,而COM則是一個純技巧名詞,這也是年夜家更多的據說ActiveX和OLE的緣由。COM是應OLE的需求而出生的,所以固然COM是OLE的基本,但OLE的發生卻在COM之前。COM的根本動身點是,讓某個軟件經由過程一個通用的機構為另外一個軟件供給辦事。ActiveX最焦點的技巧照樣COM。ActiveX和OLE的最年夜分歧在於,OLE針對的是桌面上運用軟件和文件之間的集成,而 ActiveX則以供給進一步的收集運用與用戶交互為主。COM對象可以用C++、Java和VB等隨意率性一種說話編寫,並可以用DLL或作為分歧進程任務的履行文件的情勢來完成。應用COM對象的閱讀器,無需關懷對象是用甚麼說話寫的,也不必關懷它是以DLL照樣以別的的進程來履行的。從閱讀器端看,無任何差別。如許一個通用的處置技能異常有效。

3.ActiveX控件工程的創立

應用VS2010有兩種方法可以創立ActiveX工程,

第一種:創立“MFC ActiveX 控件”工程;

第二種:創立“ATL 項目”。因為應用ATL開辟ActiveX控件須要懂得com技巧,對法式員的請求也較高,開辟時光也較長,所以假如ActiveX只在windows操作體系下運轉,那末就應用“MFC ActiveX 控件”工程來疾速樹立ActiveX控件。然則這裡要留意了:應用“MFC ActiveX 控件”工程來疾速樹立ActiveX控件,他不只要樹立在windows操作體系下,還必需在windows操作體系下裝置c++依附庫裝置包,由於MFC是樹立在微軟的c++靜態庫的基本上的。所以這兩種方法各有優缺陷,依據項目需求來選擇合適的方法。

4.應用VS2010創立MFC ActiveX工程項目步調

因為應用ATL停止ActiveX工程的創立難度比擬年夜,所以這裡先應用“MFC ActiveX 控件”工程來創立一個簡略的ActiveX控件。

第一:新建項目-》選擇“MFC ActiveX 控件”工程,給項目定名TestMfcAtlDebug,點擊肯定,彈出“控件領導”對話框

第二:在概述,運用法式設置,控件稱號和控件設置都可以選擇默許,然後點擊“完成”,如許“MFC ActiveX 控件”工程創立完成

5.剖析“MFC ActiveX 控件”工程的三個主要的類和對外接口界說文件idl

應用領導創立落成程可以看到主動生成了三個類,TestMfcAtlDebug,TestMfcAtlDebugCtrl和TestMfcAtlDebugPropPage

可以翻開下面三個類的頭文件及cpp文件,發明它們都是派生類。

TestMfcAtlDebug:cpp文件中界說了DllRegisterServer和DllUnregisterServer,可以發明ActiveX的注冊和反組冊都與該類有關。

TestMfcAtlDebugCtrl:可以發明該頭文件中聲清楚明了新聞映照(讓ActiveX控件法式可以接收體系發送的事宜告訴,如窗體創立和封閉事宜),調劑映照(讓內部挪用法式(包括ActiveX的容器)可以便利地拜訪ActiveX控件的屬性和辦法),事宜映照(讓ActiveX控件可以向內部挪用法式(包括ActiveX的容器)發送事宜告訴)。也就是說對ActiveX控件的窗口操作都將在這個類中完成,包含ActiveX控件的創立,重繪,和在此類中創立可視MFC窗體。

TestMfcAtlDebugPropPage:顯示ActiveX控件的屬性頁的

讓我們來看看最主要的部門:對外接口界說文件TestMfcAtlDebug.idl,代碼以下:

#include <olectl.h> 
#include <idispids.h> 
 
[ uuid(69EE37F4-8B36-495F-9F60-5E3AAF2FB494), version(1.0), 
 control ] 
library TestMfcAtlDebugLib 
{ 
  importlib(STDOLE_TLB); 
 
  // CTestMfcAtlDebugCtrl 的主調劑接口 
  [  
    uuid(6B60346D-5CCD-4907-83F4-51938558A9B7)  
  ] 
  dispinterface _DTestMfcAtlDebug 
  { 
    properties: 
    methods: 
 
      [id(DISPID_ABOUTBOX)] void AboutBox(); 
  }; 
 
  // CTestMfcAtlDebugCtrl 的事宜調劑接口 
 
  [  
    uuid(E26ECC46-9BA2-4C25-A4DD-A690560A5113)  
  ] 
  dispinterface _DTestMfcAtlDebugEvents 
  { 
    properties: 
      // 事宜接口沒有任何屬性 
 
    methods: 
  }; 
 
  // CTestMfcAtlDebugCtrl 的類信息 
  [ 
    uuid(DD0CF7EF-A181-428C-B5FC-C44A1C13CA43) 
  ] 
  coclass TestMfcAtlDebug 
  { 
    [default] dispinterface _DTestMfcAtlDebug; 
    [default, source] dispinterface _DTestMfcAtlDebugEvents; 
  }; 
 
};

[這個就是對外接口界說文件,假如內部法式想要挪用ActiveX的辦法,屬性和在注冊表注冊的classid(WEB網頁挪用須要應用),就必需懂得這個文件,這個文件可以分為四個部門來看:

起首是TestMfcAtlDebug.Lib這個庫信息

這個就不做詳解

第二部門是調劑映照的接口信息,該接口信息包括了屬性(如控件配景色)和對外辦法

外面界說了一個辦法AboutBox(),該辦法便可以被內部法式挪用,在該接口裡界說的函數都是純虛函數,這些函數的完成都是在TestMfcAtlDebugCtrl中完成的,MFC經由過程底層的封裝,讓TestMfcAtlDebugCtrl類繼續這個接口,完成函數。

第三部門是事宜映照的接口信息

第四部門是類的信息,個中uuid就是ActiveX控件注冊到注冊表的classid,它是ActiveX注冊後在體系內的獨一標識,WEB網頁就是應用這個ID加載ActiveX控件的

6.界說調劑映照和事宜映照辦法,供給給內部挪用者應用

那末怎樣界說新的調劑映照和事宜映照辦法呢,假如手動界說很不便利,固然應用編譯器停止界說,步調是翻開類視圖:

可以看到TestMfcAtlDebugLib中有_DTestMfcAtlDebug和_DTestMfcAtlDebugEvents,在_DTestMfcAtlDebug項中可以右鍵-》添加辦法(或屬性),該操作是完成調劑映照的辦法和屬性的添加;在_DTestMfcAtlDebugEvents項中可以右鍵-》添加辦法(或屬性),該操作是完成事宜映照的辦法和屬性的添加。

舉個例子,假如要添加一個調劑映照的辦法Fuck2(),使得內部可以挪用:

在_DTestMfcAtlDebug項中可以右鍵-》添加辦法,設置框

填寫完信息後點擊完成,內部便可以挪用辦法Fuck2,同時ActiveX控件項目代碼的外部將會在三個文件中新增代碼:

1.在

2.在

3.在

7.注冊ActiveX控件

依照下面的步調曾經完成簡略ActiveX控件(無窗體界面的控件)的編寫,從新生成後會在Debug下生成一個TestMfcAtlDebug.ocx的文件,應用windows的dos窗口可以注冊這個ActiveX控件

步調:

起首win+R鍵翻開運轉,然後輸出注冊敕令:regsvr32 c:\.......\TestMfcAtlDebug.ocx(反注冊敕令:regsvr32 c:\.......\TestMfcAtlDebug.ocx -u)

有兩種情形會招致控件注冊掉敗:

第一種:應用非Administrator用戶登入體系會因為權限缺乏而沒法注冊com組件,這時候候就必需應用Administrator用戶登入操作體系

第二種:ActiveX控件所依附的dll庫被法式給占用,就會招致注冊掉敗,處理方法是將正在運轉的法式封閉便可以

8.測試ActiveX控件的辦法

依照下面的步調曾經完成ActiveX控件的編寫,也將這個控件注冊勝利了,那末怎樣測試這個控件呢,有三種方法:

第一種:應用html網頁來測試

在TestMfcActiveX.htm的文件中編寫代碼以下:

<HTML> 
<HEAD> 
<TITLE>Test ActiveX</TITLE> 
</HEAD> 
<OBJECT ID="TestMfcAtl Control" WIDTH=528 HEIGHT=545 classid="CLSID:DD0CF7EF-A181-428C-B5FC-C44A1C13CA43"> 
  <PARAM NAME="_Version" VALUE="65536"> 
  <PARAM NAME="_ExtentX" VALUE="12806"> 
  <PARAM NAME="_ExtentY" VALUE="1747"> 
  <PARAM NAME="_StockProps" VALUE="0"> 
</OBJECT> 
</HTML>

留意下面的classid就是在idl文件中類的uuid,然後翻開這個網頁就會顯示ActiveX控件。下面的classid在控件勝利注冊後也能夠經由過程注冊表查找,詳細辦法是win+R鍵,輸出regedit敕令,就會彈出“注冊表編纂器”,地位在“HKET_CLASSES_ROOT”中,依據你控件的稱號,疾速按下前三個字母,然後便可以定位到比擬好找的地位,以下圖

第二種:樹立Mfc運用法式,在Mfc窗口右鍵-》拔出“ActiveX”控件,然後就會在MFC的窗體上顯示ActiveX控件

第三種:也是最便利的一種辦法,就是應用vs自帶的ActiveX Control Test Container來測試ActiveX控件,然則VS2010在“對象”中沒有這一項,那末我們起首可以手動把這個對象添加到VS2010裡,起首找到C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\TstCon.sln,然後應用VS2010翻開處理計劃TstCon.sln,編譯項目TCProps和TstCon,編譯完成後會在C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\Debug\中生成TstCon.exe履行法式,這個履行法式就是ActiveX Control Test Container,接上去我們就在VS2010中的對象中添加這個TstCon.exe,在VS2010中的“對象”菜單項當選擇“內部對象”,在彈出的窗體中添加一個新的對象,題目為ActiveX Control Test Container,敕令為C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\Debug\TstCon.exe,然後點擊肯定便可以完成對象的添加了。

如許,在“對象”中就有了一個ActiveX Control Test Container,點擊它就會彈出測試ActiveX的容器,以下圖

點擊Edit->Insert New Control->選擇TestMfcAtlDebug Control,點擊OK

然後就會顯示這個注冊後的AcitveX控件,假如要測試這個控件的調劑映照的辦法Fuck2,就先選中控件,然後點擊Control-》Invoke Methods,在Methods Name下拉框當選擇Fuck2這個辦法,點擊Invoke按鈕便可以測試這個辦法了,以下圖:

我們可以看到下面的ActiveX控件是一個空白的配景和一個圈構成的,並沒有窗體界面,那末怎樣添加窗體呢?

9.向ActiveX控件中添加一個Mfc窗體,就是一個帶界面的ActiveX控件

步調:

第一:在資本視圖中新建一個對話框資本

去失落上邊的“肯定”和“撤消”按鈕,然後修正對話框屬性:Border改成None,Control改成Ture,ID改成IDD_MAIN_DIALOG,Style改成Child,System改成False,Visible改成True,然後在對話框中雙擊,為對話框添加一個類,以下圖:

點擊“完成”。在處理計劃資本治理器中新增了一個ViewDialog.h和ViewDialog.cpp這個ViewDialog類就是方才我們樹立的對話框類

然後拖一個Edit Control到對話框上,修正其ID為IDC_EDIT_OUTPUT,再拖一個Button到對話框上,此時對話框後果為:

對話框樹立完成,接上去就是要把它添加到ActiveX控件中去

第二:在TestMfcAtlDebugCtrl.h中界說對話框實例m_VideoDlg

然後在TestMfcAtlDebugCtrl類中界說兩個新聞映照:窗體創立完成新聞映照和窗體轉變年夜小新聞映照

在VS2010的菜單項“項目”--》“類領導”中,選摘要添加到的項目和類中,選擇“新聞”選項卡,選擇WM_CREATE後點擊”添加處置法式“按鈕和選擇WM_SIZE

後點擊”添加處置法式“,如許在“現有的處置法式”中就有OnCreate和OnSize這兩個函數,點擊肯定,完成新聞映照函數的添加,如圖:

在TestMfcAtlDebugCtrl.cpp中主動添加以下代碼,如圖:

在OnCreate函數中編寫以下代碼(Create是在ActiveX控件中創立一個窗體對話框,IDD_VIEW_DIALOG就是方才新建的對話框):

在OnSize函數編寫代碼以下(MoveWindow是肯定窗體對話框在ActiveX中的年夜小):

第三:從新編譯,注冊ocx,應用ActiveX Control Test Container再次測試該控件

可以發明這個ActiveX控件中曾經有了界面了

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved