Preface
因爲項目需要,開始從事ActiveX方面的工作,看了一些資料,可惜都是些COM原理方面的,沒有切合實際動手的東西,在CodeProject上讀完David Marcionek的文章【1】後,收穫良多,但也遇到一些惱人的小問題,因此在其基礎上就一些易錯點做些小注解。本文版權歸David Marcionek所有。
簡介
本文目的在於讓你快速掌握ActiveX控件開發技術,將會展示開發ActiveX應該知道的基本概念,如方法,屬性和事件,以及如何在一個ActiveX控件和一個web頁面之間進行通信
在本文中,我們將創建一個ActiveX控件,當加載控件時,它會顯示一個動畫進度條,以便向用戶表明控件正在加載。此控件會包含展示如何在控件和web頁面間傳遞信息的功能。下面我們會使用VS2005一步步進行開發的。
創建一個ActiveX控件
爲了創建一個ActiveX控件,如下所示:
1,創建一個"MFC ActiveX Control"項目,取名MyActiveX,
2,在"MFC ActiveX Control Wizard"對話框中,選中"Control Settings"
3,在"Create control based on"中選擇"STATIC".我們將使用靜態控件,因爲我們只是顯示從控件中獲取的輸出信息,並不接受輸入信息。
4,在"Additional features"中,確保"Activates when visible"和"Flicker-free activation"被選中,"Has an About box dialog"不選中。
5,默認情況下,wizard會創建一個項目,使其在一個共享DLL中使用MFC.我們必須更改這種情況,因爲除非所需的MFC DLL都已經在系統中安裝了,否則ActiveX控件就不能運行。包含ActiveX控件的Web頁面上出現紅叉的一個原因就是此。在項目的屬性中,"Configuration Properties"-->"General",將“Use of MFC” 改爲“Use MFC in a Static Library”.
6,嚮導會創建如下幾個類:
1)CMyActiveXApp:這是ActiveX應用程序類,從COleControlModule類繼承下來的。它是OLE控件模塊對象繼承自的基類,包含了初始化(InitInstance)和清理(ExitInstance)的代碼
2)CMyActiveXCtrl:從COleControl繼承而來,這裏是我們實現控件大部分功能的地方。
3)CMyActiveXPropPage:從COlePropertyPage繼承而來,用於管理控件的屬性頁對話框。嚮導已經爲我們創建了一個默認的對話框來作爲控件的屬性頁對話框。
增加動畫GIF支持
這裏我們使用了一個CPictureEx類(具體代碼見最後的“資源”部分),vs2005增加一個動畫GIF資源有一個bug(其實在vs2008中也存在),我們可以使用下面這種技巧來回避它:
將ProcessingProgressBar.gif拷貝到項目文件夾下,然後更名爲ProcessingProgressBar.gaf,在資源視圖中,右鍵資源文件MyActiveX.rc,選擇“添加資源”。在“添加資源”對話框中,按下”導入“按鈕,並選擇ProcessingProgressBar.gaf文件。在”自定義資源類型“對話框中輸入“GIF”作爲資源類型。這就會將GIF圖片文件導入項目中。然後將導入的圖片ID從IDR_GIF1
改爲IDR_PROGRESSBAR
.。
現在開始着手恢復原狀,首先,打開MyActiveX.rc的源文件,找到IDR_PROGRESSBAR
的定義,將其文件名改爲
”
ProcessingProgressBar.gif”.同樣地,把項目文件夾下的圖片文件名也改回爲“ProcessingProgressBar.gif”,最後在“解決方案資源管理器”視圖中,選中ProcessingProgressBar.gaf,在其”屬性“中,修改”相對路徑“爲”
."ProcessingProgressBar.gif”.
增加對話框
現在,我們爲進度條圖像增加一個對話框。
1, 在“資源“視圖中,右鍵”對話框“,選擇”插入對話框“來創建一個默認的對話框。
2, 刪除默認產生的“確定“和”取消“按鈕,調整對話框大小爲230*40。
3,
更改對話框ID爲IDD_MAINDIALOG
,並修改對話框屬性:
Border—none,
Style – Child, System Menu – False, Visible – True.
4,
在對話框中加入一個圖片控件,調整其大小爲
200*20
,更改控件
ID
爲
IDC_PROGRESSBAR
,顏色爲
“white”
。
5,
爲對話框創建一個類,名爲
CMainDialog,
1,
爲
CMyActiveXCtrl
類增加一個變量
m_MainDialog
,類型爲
CMainDialog
2,
爲
CMainDialog
類增加一個變量
m_ProgressBar
,類型爲
CPictureEx
,這裏注意確保
“
控件變量
“
選中,並且對於的控件是
”IDC_PROGRESSBAR”.
增加支持代碼
好了,現在加入一些代碼來繪製主對話框和進度條控件吧。
1
,爲
CMyActiveXCtrl
處理
WM_CREATE
事件的代碼,在其中加入: