原文:http://iysm.net/?p=114程序員
ActiveX 控件是基於組件對象模型 (COM) 的可重用軟件組件,普遍應用於桌面及Web應用中。在VC下ActiveX控件的開發能夠分爲三種,一種是直接用COM的API來開發,這樣作顯然很是的麻煩,對程序員要求也很是高,所以通常是不予考慮的;一種是基於傳統的MFC,採用面向對象的方式將COM的基本功能封裝在若干MFC的C++類中,開發者經過繼承這些類獲得COM支持功能。MFC爲廣大VC程序員所熟悉,易於上手學習,但缺點是MFC封裝的東西比較多,所以用MFC開發出來的控件相對會比較大,所以比較適於開發桌面ActivexX控件,尤爲是有GUI界面的控件。第三種就是基於ATL的,ATL能夠說是專門面向COM開發的一套框架,使用了C++的模板技術,在運行時不須要依賴於相似MFC程序所須要的龐大的代碼模塊,更適合於Web應用開發。框架
本文介紹的是採用第二種方式,即應用MFC進行桌面可視控件開發的方法步驟,開發環境則是基於VC2005。函數
1.建立控件項目學習
打開VC2005後,咱們要先建立一個項目,在新建項目頁的左側選擇Visual C++-MFC,在右側選擇MFC ActiveX控件,填上解決方案和項目名稱,好比在這裏個人項目名稱是activexdemo1,解決方案名稱是activexdemo。.net
而後進入控件嚮導頁,在嚮導的第二頁有個運行時許可證,選中這個的話會在生成控件的同時生成一個許可證文件,其餘用戶在使用這個控件的時候必須同時附有這個許可證,在此咱們保持默認狀態,不選。對象
下一頁是關於項目中各部分的命名問題,能夠根據須要自定義,這裏就按默認的狀況不作修改了。繼承
下一頁是選擇控件基於哪一種控件的擴展以及控件的一些基本特性。若是新建的控件是基於某種特定控件的話,就在建立的控件基於下選擇所要繼承的控件名,不然就保持none。下方的附加功能根據實際須要進行選擇,而且能夠將鼠標放置於選項上方,功能的說明會自動顯示在動態出現的小提示信息窗口中。選擇完畢點擊完成,嚮導就根據你的選擇生成新項目。接口
進入開發環境,咱們能夠先看一下類視圖。事件
其中的Cactivexdemo1App是咱們這個控件的主程序模塊,定義了控件的註冊(DllRegisterServer)、刪除(DllUnregisterServer)等功能,通常不用動,若有須要咱們能夠在其中的InitInstance和ExitInstance中定義咱們本身的初始化和終止操做代碼,通常也就是一些資源的初始化和銷燬工做。ip
Caxtivexdemo1Ctrl是控件類,咱們要作的控件功能基本上就是要在這個類中實現。
須要提一下的是在這個類中重寫了父類的OnDraw函數,有以下兩句代碼:
pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
也就是在控件上畫了一個橢圓,實際控件開發中能夠根據功能須要修改重寫這個函數來繪製控件界面。
Caxtivexdemo1PropPage是屬性頁類,這個類實現了一個在開發時設定控件屬性的對話框。
activexdemo1Lib是爲客戶程序提供本控件的屬性、方法以及可能響應的事件的接口的庫節點,在添加控件的這些功能的時候會用獲得。
其中的Cactivexdemo1App是咱們這個控件的主程序模塊,定義了控件的註冊(DllRegisterServer)、刪除(DllUnregisterServer)等功能,通常不用動,若有須要咱們能夠在其中的InitInstance和ExitInstance中定義咱們本身的初始化和終止操做代碼,通常也就是一些資源的初始化和銷燬工做。
Caxtivexdemo1Ctrl是控件類,咱們要作的控件功能基本上就是要在這個類中實現。
須要提一下的是在這個類中重寫了父類的OnDraw函數,有以下兩句代碼:
pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
也就是在控件上畫了一個橢圓,實際控件開發中能夠根據功能須要修改重寫這個函數來繪製控件界面。
Caxtivexdemo1PropPage是屬性頁類,這個類實現了一個在開發時設定控件屬性的對話框。
activexdemo1Lib是爲客戶程序提供本控件的屬性、方法以及可能響應的事件的接口的庫節點,在添加控件的這些功能的時候會用獲得。