應用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控件中曾經有了界面了
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。