亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

使用VS2010創建MFC ActiveX工程項目

2020-01-26 15:04:37
字體:
來源:轉載
供稿:網友

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)

有兩種情況會導致控件注冊失?。?/p>

第一種:使用非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中的大?。?/p>

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

可以發現這個ActiveX控件中已經有了界面了

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人中文字幕在线| 日韩中文字幕网站| 欧洲美女免费图片一区| 欧美精品videos| 久久夜色精品亚洲噜噜国产mv| 日韩专区在线观看| 蜜月aⅴ免费一区二区三区| 国产精品久久久久久亚洲影视| 欧美激情欧美狂野欧美精品| 久久6精品影院| 亚洲视频在线免费看| 亚洲女成人图区| 欧美高清自拍一区| 欧美精品免费在线观看| 中文字幕在线观看日韩| 国产成人一区二区三区| 正在播放欧美视频| 日韩亚洲成人av在线| 日韩av日韩在线观看| 九九热r在线视频精品| 久久久久久久成人| 热草久综合在线| 精品高清一区二区三区| 欧美成人一区二区三区电影| 国产在线视频一区| 国产精品久久久久免费a∨大胸| 国模精品视频一区二区| 亚洲最大福利网站| 欧美日韩免费看| 中文日韩在线观看| 精品二区三区线观看| 青青在线视频一区二区三区| 成人免费观看网址| 欧美人在线视频| 亚州精品天堂中文字幕| 久久久久久有精品国产| 国产视频欧美视频| 麻豆精品精华液| 米奇精品一区二区三区在线观看| 亚洲综合在线做性| 国产精品v日韩精品| 国产大片精品免费永久看nba| 亚洲欧美在线一区| 欧美理论电影在线播放| 人人澡人人澡人人看欧美| 97精品一区二区视频在线观看| 日韩h在线观看| 欧美大片在线免费观看| 日韩成人中文电影| 久久精品视频在线观看| 欧美国产日本高清在线| 中文字幕欧美在线| 亚洲视频网站在线观看| 日韩在线精品一区| 在线观看亚洲区| 91极品视频在线| 在线丨暗呦小u女国产精品| 高清日韩电视剧大全免费播放在线观看| 日韩视频在线免费观看| 精品国产精品三级精品av网址| 91精品国产91久久久久福利| 91社区国产高清| 日韩中文字幕久久| 亚洲黄色av女优在线观看| 日本91av在线播放| 亚洲成人黄色在线观看| 国产美女精品免费电影| 91免费电影网站| 热久久免费视频精品| 激情久久av一区av二区av三区| 国产精品欧美日韩一区二区| 欧美激情一二区| 影音先锋日韩有码| 亚洲性xxxx| 91九色国产在线| 日韩电影视频免费| 中文字幕日韩精品在线| 欧美性高潮床叫视频| 久久亚洲精品网站| 国产欧美最新羞羞视频在线观看| 国产精品久久久久久久9999| 国产一区二区三区久久精品| 日韩亚洲在线观看| 亚洲欧美日韩第一区| 久久久精品一区| 国产欧美va欧美va香蕉在线| 中国日韩欧美久久久久久久久| www欧美xxxx| 日本伊人精品一区二区三区介绍| 国产精品视频26uuu| 成人国产在线视频| 亚洲色图色老头| 日韩国产欧美区| 欧美日韩免费在线| 国产视频福利一区| 国产成人精品免费久久久久| 久久天天躁狠狠躁夜夜躁2014| 国产91露脸中文字幕在线| 久久久久久久久久久免费精品| 日韩av在线最新| 亚洲精品福利视频| 色噜噜狠狠狠综合曰曰曰| 欧美成人小视频| 亚洲电影免费观看高清完整版在线观看| 91精品免费看| 欧美理论电影在线观看| www.久久久久久.com| 亚洲已满18点击进入在线看片| 91精品国产色综合久久不卡98| 欧美激情在线有限公司| 亚洲国产精品嫩草影院久久| 国产欧美 在线欧美| 久久综合亚洲社区| 国产91精品久久久久| 亚洲男人的天堂在线播放| 国产精品日韩在线播放| 国产精品人人做人人爽| 亚洲精品久久久久中文字幕二区| 国产精自产拍久久久久久| 日本精品久久久久影院| xxx成人少妇69| 97热在线精品视频在线观看| 成人黄色生活片| 色婷婷综合久久久久中文字幕1| 蜜臀久久99精品久久久无需会员| 91精品国产综合久久香蕉的用户体验| 日韩中文字幕在线看| 亚洲精品美女久久久| 欧美一级在线播放| 国产精品91在线观看| 亚洲欧美日韩一区在线| 国产不卡视频在线| 亚洲影视九九影院在线观看| 国产精品大片wwwwww| 精品欧美一区二区三区| 亚洲毛片在线观看.| 91免费国产网站| 一本一本久久a久久精品综合小说| 中国china体内裑精亚洲片| 久久久久九九九九| 茄子视频成人在线| 日韩电影在线观看中文字幕| 成人免费在线视频网站| 精品视频在线播放色网色视频| 国产精品视频白浆免费视频| 久久精品国产99国产精品澳门| 欧美精品国产精品日韩精品| 亚洲国产欧美自拍| 国产亚洲激情在线| 亚洲日韩欧美视频一区| 91精品视频大全| 久久中国妇女中文字幕| 色七七影院综合| 亚洲精品久久久久久久久久久久久| 国产精品老女人精品视频| 91精品国产91久久久久| 国产精品日韩在线| 热re91久久精品国99热蜜臀| 国产性色av一区二区| 亚洲美女免费精品视频在线观看| 亚洲欧美激情另类校园| 欧美性一区二区三区| 欧美日韩在线视频观看| 91po在线观看91精品国产性色|