以上部分操縱的都是Windows標(biāo)準(zhǔn)控件,其實在Windows里,你還會常常接觸到ActiveX控件,它來源于第三方,而非Windows操作系統(tǒng)。這樣的控件一般來說,功能豐富而且使用方便,從而大大簡化了程序員的工作。本章節(jié)以我們需要使用到的Flash控件為例細(xì)作闡述。
1 使用ActiveX控件
以上部分操縱的都是Windows標(biāo)準(zhǔn)控件,其實在Windows里,你還會常常接觸到ActiveX控件,它來源于第三方,而非Windows操作系統(tǒng)。這樣的控件一般來說,功能豐富而且使用方便,從而大大簡化了程序員的工作。本章節(jié)以我們需要使用到的Flash控件為例細(xì)作闡述。
1.1 控件的注冊
不同于Windows標(biāo)準(zhǔn)控件,ActiveX控件需要注冊才能使用,ActiveX一般以.OCX或者.DLL文件格式發(fā)布,可以使用VC附帶的工具來注冊某個控件,按照以下步驟:
1. 在VC的Tools菜單下啟動ActiveX Control Test Container;
2. 在ActiveX Control Test Container里打開菜單File\Register Controls…;
3. 彈出窗口Register Controls顯示系統(tǒng)中已注冊的所有ActiveX控件,點(diǎn)擊左下角的“Register…”按鈕;
4. 選擇待注冊的控件文件,如:“C:\WINNT\system32\Macromed\Flash\swflash.ocx”即為Macromedia Flash的ShockwaveFlash控件文件;
5. 點(diǎn)擊“打開”按鈕,即完成以上控件的注冊,我們可以在控件列表中發(fā)現(xiàn)它的名字為“ShockwaveFlash. ShockwaveFlash.1”;
以上操作畫面如圖所示:
圖25 注冊ActiveX控件
還有一種簡單一點(diǎn)的辦法,使用regsvr32注冊之即可,如圖示出注冊畫面:
圖26 使用regsvr32注冊ActiveX控件
對于某些軟件,安裝時即完成對自帶控件的注冊。例如:MacromediaFlash安裝之后,你的Internet瀏覽器就可以播放動畫了,你也可以在控件列表里找到ShockwaveFlash控件。那么這些軟件是如何完成控件的自注冊的呢(這也是常見的問題之一)?一種途徑是使用安裝程序,它們可以自動完成ActiveX控件的注冊;另一種方法是利用程序調(diào)用DllRegisterServer()即可:
HMODULE hModule=LoadLibrary(sControlFilePath);
if(hModule)
{ FARPROC DLLRegisterServer = (FARPROC)GetProcAddress(hModule "DllRegisterServer");
if(DLLRegisterServer)
{ HRESULT regResult = DLLRegisterServer();
if(regResult != NOERROR)
MessageBox(NULL "注冊ActiveX控件時發(fā)生錯誤!" "警告" MB_OK|MB_ICONINFORMATION);
}
FreeLibrary(hModule);
}
1.2 引入控件
好了,目前為止,我們已經(jīng)有Flash控件了,那么我們在程序中引入它:
1. 在對話框設(shè)計界面空白處右鍵,彈出菜單,選擇Insert ActiveX Control…,如下所示:
圖27 選擇Insert ActiveX Control
2. 在Insert ActiveX Control窗口中,在控件列表中選擇Shockwave Flash Object,如圖所示:
圖28 選擇Shockwave Flash Object
1. 好了,現(xiàn)在的Flash控件成功引入!我們繼續(xù)調(diào)整Flash控件的大小和位置:
圖29 引入Flash控件
引入ActiveX控件,還有一種途徑,就是通過Project\Add To Project\Componets and Controls…,然后選擇Registered ActiveX Controls。在此不再贅述。
1.3 設(shè)置控件屬性
面對這個新鮮的玩意兒,我們該設(shè)置設(shè)置屬性,讓它干干活。
界面確實變化了不少,F(xiàn)lash Properties標(biāo)簽頁即列舉了Flash控件的屬性:
圖30 Flash控件的Flash Properties標(biāo)簽頁
All標(biāo)簽頁則以值的方式列出了該控件的所有屬性:
圖31 Flash控件的All標(biāo)簽頁
做過Flash的朋友可能對這些屬性的含義要熟悉一點(diǎn),例如:Quality用以設(shè)置動畫的畫面質(zhì)量,Scale則指定動畫的顯示方式,Play和Loop決定動畫是否一開始就播放以及是否循環(huán)播放,如此等等。
我們現(xiàn)在讓這個控件播放一則動畫,操作太簡單了,將Movie URL設(shè)置成動畫文件路徑即可:
圖32 設(shè)置Flash的Movie URL
運(yùn)行程序,乖乖,該來的都來了:
圖33 FlashPlayer運(yùn)行界面
1.4 映射控件變量
小試牛刀,看來已初顯成效,我們現(xiàn)在來更好地控制這個控件,第一步,映射變量:
1. 將控件的ID設(shè)置成IDC_FLASH_SCREEN;
2. 復(fù)習(xí)2.4節(jié)的內(nèi)容,打開ClassWizard窗口;
3. 選擇IDC_FLASH_SCREEN,雙擊之,不好,好像不太一樣:
圖34 提示窗口
VC可以自動每一個ActiveX控件封裝出一個類作為未來的控件變量的類型,如果你還希望映射控件變量,那么選擇“確定”。
4. 接下來的操作是為這個自動生成的類指定類名和文件名:
圖35 確認(rèn)類名和文件名
別找樂了,使用缺省的CShockwaveFlash就很好,我們繼續(xù)。
5. 接下來的畫面比較熟悉,我們選擇Control和CShockwaveFlash:
圖36 添加控件對象變量
ActiveX控件沒有值變量,只有一個控件對象變量,這個變量的類型就是前面準(zhǔn)備好的CShockwaveFlash,沒問題,我們將Flash控件取名為m_FlashScreen。
1.5 響應(yīng)控件事件
ActiveX控件也具有自身的事件,例如我們的IDC_FLASH_SCREEN具有以下事件:
圖37 ActiveX控件事件
事件的響應(yīng)與標(biāo)準(zhǔn)控件一樣,在此不再贅述。
1.6 調(diào)用控件方法
前面已經(jīng)提及,不管是標(biāo)準(zhǔn)控件,還是ActiveX控件,都可以映射成對象變量。既然是對象,我們就可以調(diào)用成員函數(shù)(或曰方法,method)來完成特定的功能,下面我們結(jié)合FlashPlayer來學(xué)習(xí)CShockwaveFlash方法的調(diào)用。
通過3.4,我們可以發(fā)現(xiàn)VC已經(jīng)幫我們準(zhǔn)備了兩個文件shockwaveflash.cpp和shockwaveflash.h,以及一個類CShockwaveFlash:
圖38 CShockwaveFlash的類框架
VC會自動提取控件的所有方法和屬性,并封裝成我們所熟悉的成員函數(shù)形式。CShockwaveFlash為我們準(zhǔn)備了不少的函數(shù),我們先用一個熟悉點(diǎn)的試試:
void CShockwaveFlash::SetMovie(LPCTSTR lpszNewValue)
{ static BYTE parms[] = VTS_BSTR;
InvokeHelper(0x66, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, lpszNewValue);
}
這個SetMovie()可以用來設(shè)置當(dāng)前播放動畫的URL,估計相當(dāng)于屬性窗口里面的Movie URL。我們使用這個SetMovie()結(jié)合“瀏覽”按鈕來實現(xiàn)選擇播放功能:
void CFlashPlayerDlg::OnBrowser()
{ CFileDialog FileDialog(true, ".swf", "", OFN_EXPLORER, "Flash動畫文件(*.swf)|*.swf|所有文件(*.*)|*.*||", this);
if(FileDialog.DoModal() == IDOK)
{ m_sFilePath = FileDialog.GetPathName();
UpdateData(false);
m_FlashScreen.SetMovie(m_sFilePath);
}
}
嗯,運(yùn)行FlashPlayer,運(yùn)行界面如下所示,它現(xiàn)在已支持文件選擇的功能了:
圖39 支持點(diǎn)播的FlashPlayer
FlashPlayer程序至此打造完畢,以下向大家推薦一些比較有用的控件:
1.1 MsChart控件
控件名稱:Microsoft Chart Control 6.0 (sp4)
控件類:CMsChart
控件簡介:MsChart是微軟制作的功能強(qiáng)大的圖表工具,用它可以很方便的建立各種圖表,包括各種二維、三維的餅圖、折線圖、直方圖、折線圖、面積圖等。
應(yīng)用圖例:
圖40 MsChart控件應(yīng)用圖例
1.2 DataGrid控件
控件名稱:Microsoft DataGrid Control 6.0 (sp5)
控件類:CDataGrid
控件簡介:DataGrid控件是由微軟提供的數(shù)據(jù)表格控件,需要與ADODC控件配合使用。通過使用DataGrid控件,可以很方便地實現(xiàn)數(shù)據(jù)表記錄的瀏覽、增加、刪除和修改功能。
應(yīng)用圖例:
圖41 DataGrid控件應(yīng)用圖例
1.3 MsComm控件
控件名稱:Microsoft Communications Control version 6.0
控件類:CMsComm
控件簡介:MSComm 控件提供了一系列標(biāo)準(zhǔn)通訊屬性和方法,使用它可以建立起應(yīng)用程序與串行端口的聯(lián)接。
應(yīng)用圖例:
圖42 MsComm控件應(yīng)用圖例
以上畫面來源于筆者自行制作的手機(jī)通訊軟件FreePhone,其底層采用MsComm控件,感興趣的讀者可以參見http://bluejoe.yeah.net。
1.4 Web瀏覽器控件
控件名稱:Web瀏覽器控件
控件類:CWebBrowser2
控件簡介:Web瀏覽器相信大家再也熟悉不過了,IE瀏覽器就內(nèi)嵌了一個Web瀏覽器控件,這也就是為什么騰訊瀏覽器與IE如此相似的原因。通過使用Web瀏覽器控件,可以很方便地實現(xiàn)網(wǎng)頁頁面的瀏覽和顯示。
應(yīng)用圖例:
圖43 Web瀏覽器控件應(yīng)用圖例
1.5 ActiveMovie控件
控件名稱:ActiveMovie Control Object
控件類:CActiveMovie3
控件簡介:ActiveMovie是Microsoft公司開發(fā)的視頻播放控件。該控件內(nèi)嵌了Microsoft MPEG音頻解碼器和Microsoft MPEG視頻解碼器,播放控制更加簡捷方便。
應(yīng)用圖例:
圖44 ActiveMovie控件應(yīng)用圖例
2 結(jié)束語
控件是好東西,有了它,絕對會節(jié)省你的不少時間和精力。如果你正在為某個復(fù)雜的實現(xiàn)而苦惱萬分,那么筆者建議你先上網(wǎng)查查是否已經(jīng)有相應(yīng)的控件可供下載使用。一個專業(yè)的控件往往會比你考慮得要周密得多,也要方便得多。而你的任務(wù)就是如何使用它,如何去推廣它;當(dāng)然,如果你有好的代碼,譬如是一個底層硬件通訊的工程類,我也希望你會將這些東西封裝成控件,然后貢獻(xiàn)出來,讓大家一塊共享你的成就和快樂!