?? 18.7 activex 控件測試程序.txt
字號:
18.7 ActiveX 控件測試程序
試程序
下面,再利用VC++編寫一個 ActiveX控件的測試程序。新建一個基于對話框的工程,工程取名為: ClockTest,井刪除自動生
成的對話框資源上的靜態文本控件。在 VC++開發環境中,如果想要在對話框資源上添加一個ActiveX控件,方法是:在對話框資源上單擊鼠標右鍵,從彈出的快捷菜單中選擇【Insert ActiveX Control..】菜單項,這時,將顯示如圖 18.47所示的對話框,在此對話框中找到Clock控件井選中,然后單擊【OK】按鈕關閉該對話框即可。
「刻畫
巳J
E巳」
Class I CIIIS1i二I
PIi.:
D~YC.J章可恨"盹們\Clect陽m峙。.劇團
圖 18.47在VC程序中插入ActiveX控件的對話框
這時,在對話框資源上就插入了Clock控件。可以通過此控件提供的屬性表單設置其屬性,方法是在該控件上單擊鼠標右鍵,從彈出的快捷菜單上選擇【特性】菜單項,即可顯示該控件的屬性表單,如圖 18.48所示。在此屬性表單上,我們將Clock控件的時間間隔修改為2000,背景色修改為紅色、背景色設置為藍色。然后單擊VC++開發窗口左下角的測試按鈕,對ClockTest的對話框界面進行簡單的測試,讀者將會看到Clock這個ActiveX控件顯示的時間每隔2秒跳動一次。
F1m1!1川rml.u,liü;UW;1火咽'國 [~ Y Gener副 I CDntrDd顏色|劇I I
h町01: 12000
圖 18.48在VC開發環境中利用Cootrol控件的屬性表單設置控件的屬性
694 I脅"
VCII深λ詳解
在 VC++中,另一種插入 ActiveX控件的方法是,選擇【Projec t'\Add To Project飛 Components and Controls. .】菜單項,將顯示如圖 18 .49所示的對話框。
t WIIlO
Chooae 8四mpllnent ... Inaert InIII your prIIJect
董翩'也) . r臼仙町 3伊~~四·
R唄吏更旦旦tlveX Cortr坐j
ViSUaI C++ Coo‘四曬白
到陌ζ旺ATE . OIR
文件各咂) :
r E豆E
坐~
生巴!工」
pa晴,''' conlrol:
廠一一一一
4至
圖 18 .49添加組件和控件的對話框
在此對話框中,雙擊 "Registered ActiveX Controls"目錄,井在此目錄下找到 Clock控件并選中,如圖 18.50所示。然后單擊【Insert】按鈕,并單擊隨后顯示的確認對話框上的【確認】按鈕,這時將出現如圖 18.51所示的對話框。
l"'1'1"'111川、 d 1l d I !J ntrur'l> fierlt'ry圃---衛星l
咀~
er.letl.... r
Cho..e.....--回幅靦...‘陽..,.曬,..jed: TIOe d回 cbd Paaaje.)w嗣 M …lIOe Ad曲曲<c.由回. C鵬曲 ...d...na.e. L 巳斗E踴田 ω1 1::坦問..1叫 .c \i....x Co山山二J..Itl~四· .............. ..恤......旦巳」
團川 1111 k
a...
<<wd
.!.l
宜伸~IIJ ''''' la,i_t I
C.睛剖
旦旦」CI….....e: B…d…:
ICCIDcIc C馴M
巴旦」
H..曲.1Ie:
陌「
p.由恒。"曲時:
1"回國..睛"靦·田.:
P伽,.,憂帽,1E1"1脅d腳幅-憂靦也陽 網友寫7一一
4
圖 18.50向 VC工程添加 C10ck控件 圖 18.51插入控件時產生的封裝類
當通過這種方法插入 ActiveX控件時,會在工程中為該控件生成一個類,這里就為 Clock控件生成了一個類,類名為 CC1ock,其基類是 CWnd o該類是控件的封裝類,它封裝了對這個 ActiveX控件進行訪問的一些操作。單擊【 OK】按鈕關閉該對話框,井單擊【 Close】按鈕關閉插入組件和控件的對話框。這時,在 ClockTest工程的 ClassView選項卡上,可以看到增加了一個類: CClock,該類提供了一些函數,我們只需要調用這些函數就可以訪問 Clock這個 ActiveX控件的方法和屬性。同時,在工具箱上也增加了 Clock控件
第 18
ActiveX" 擅悻‘
的圖標,如圖 18.52所示。我們只需要單擊該圖標,并在對話框資源上拖放一塊合適的區域就可以放置一個 Clock控件,通過其屬性表單修改其屬性。
Contros咀
廈一@+圄
hB
口國國國制圃 回回國留礙盟
'BRu
L
口李日
簾
E
盛
圖 18.52在工具箱上添加的 Clock控件圖標
上面介紹的向 VC++工程中添加控件的方法都是靜態的,實際上,在程序中也可以動態地產生一個 Clock控件,首先將 ClockTest工程的對話框資源上己增加的 Clock控件刪除,然后增加一個按鈕控件,并雙擊該按鈕,接受默認的函數名稱,即為該按鈕生成一個單擊命令響應函數: OnButton1。然后為 CClockTestDlg類增加一個私有的成員變量,類型是: CClock,名稱是 ffi_c1ock。并且在 CClockTestDlg類的頭文件中包含 CClock類的定義,即在 ClockTestDlg.h文件中在 CClockTestDlg類定義之前添加下面這條語句。
#include .clock.h"
接下來就可以在 OnButtonl函數中利用 ffi_c1ock這個對象,調用 CClock類的方法對 Clock控件進行操作了。 OnButton1函數最終代碼如例 18-21所示。
例 18-21
vo工 d CClockTestDlg: :OnButtonl( )
// TODO : Add your cont r ol notification handl er code here ffi_clock. Create( "Cl ock" , WS_CHILD I WS_VISIBLE, CRect (Q, Q, lQQ , 50l , t his , 123);
上述例 18-21所示代碼利用 CClock這個類的 Create方法動態創建一個 Clock控件。這里,利用控件封裝類產生一個控件,與我們以前利用 CButton類動態產生一個按鈕控件的操作是一樣的,也是調用控件類的創建方法,這里就是調用 CClock類對象的 Create方法來實現的。該函數的第一個參數指定控件的文本,本例設置為 "Clock";第二個參數是窗口的類型,因為 Clock這個 ActiveX控件也是一個窗口類型的對象,所以它也具有窗口的標準類型,因此這里將其類型設置為 WS_CHILD和 WS_VISIBLE;第三個參數指定控件窗口在對話框中占據的區域:第四個參數為這個控件指定父窗口,即對話框窗口;最后一個參數指定控件的 ID,這里可以給其任意指定一個值。
Build并運行 ClockTest程序,當單擊對話框上的【 Buttonl】按鈕時,在對話框窗口的左上角就會出現一個時鐘控件。結果如圖 18.53所示。
詳
擬燦
|主叩
12:08:21
01
E豆」
,-…
Butto.n1
圖 18.53動態創建 Clock控件的程序運行結果
另外,還可以利用 m clock這個對象去調用 Clock控件的方法,例如 Hello方法。在上述例 18 -21所示 CClockTes tD lg類 OnButtonl函數的最后添加下面這條語句:
m_clock.Hello();
Build并運行 ClockTest程序,當單擊對話框上的【 Buttonl】按鈕時,在對話框窗口的左上角就會出現一個時鐘控件,同時會顯示一個信息框,上面顯示的信息是 "Hello",這是調用 Clock控件的 Hello方法的結果,這時程序的界面如圖 18.54所示。
ζ二 C ockT e<i t 氣芳:沒怒運惡現囂翅圃
12:11:59 01
II!M 1
陸勘WOrId!
But龜。nl
圖 18.54動態創建 C10ck控件并調用其 HeUo方法后的結果
在 Clock控件的封裝類 CClock中,可以看到該類還提供了 SetBackColor和 SetForeColor等方法。還可以利用這些方法設置 Clock控件的背景色和前景色。這些方法自然會調用 Clock控件中相應的設置屬性的方法。因此,在上述 CClockTestDlg類的 OnButtonl函數的最后添加如例 18-22所示代碼中兩條加灰顯示的語句(注:為了能夠立即看到屬性設置的效果,這里可以將該函數中己有的 He l10調用代碼注釋起來)。
例 18-22
void CClockTestDlg: :OnButtonl()
{
創~ 1697
18章 ActiveX撞件
11 TODO : Add your control notification handler code here m_clock.Create( "Clock ", WS_CHILD I WS_VISIBLE , CRect(O , O, 100 , 50) , this , 123) ;
11 m_clock .Hello() ; m_clock.Set BackColor(RGB(O , O, 255)) ; m_clock .SetForeColor(RGB (255 , O, O)) ;
可以直接給 SetBackColor和 SetForeCo lor這兩個函數的參數傳遞一個 RGB類型的顏色值,這里,我們將 Clock控件的背景色設置為藍色,前景色,也就是文本色設置為紅色。
Build并運行 ClockTes t程序,當單擊對話框上的【 Buttonl】按鈕時,將會看到在對話框窗口的左上角出現一個時鐘控件,井且該控件是藍底紅字。
另外,還可以調用 CClock類的 SetInterval函數設置 Clock控件的 Interval屬性,通過調用 GetInterval函數得到該屬性值。
以上就是對 ActiveX控件的屬性和方法的訪問方法。在 VC中,對屬性和方法都是通過相應的函數來訪問的。下面,讓我們看看在 VC中訪問 ActiveX控件的事件的方法。首先在對話框資源上放置一個 Clock控件,然后在該控件上單擊鼠標右鍵,從彈出的快捷菜單上選擇【 ClassWizard. .】,將打開如圖 18.55所示的對話框。可以看到,通過 Class Wizard 可以為 Clock控件增加 Click事件和 NewMinute事件。如果想要增加某個事件,在此對話框中選中該事件,然后單擊【 Add Function...】按鈕即可。
|噸 f I (lcl"''iWl.ldrd ' 1'-塞型國 -1.I..!tl
We..咱脅,叫 M川川劇.blt:. 1Aut翩翩on I AdIV雹XEvenl. I Cα1..川nfo 1
eoJcct I CloclcTe剖二1 O:\...\CloctTe etD l哪兒 D:\... \CloctTe etDlg . cpp Cless neme: ICClockTeslOlg Add CI..s... . 13. ' 旦旦旦斗
ObJed 10.: Me...gea: aelete'Fun耐。" I
NewM inute 旦旦~
".翩
副
斟
脅廳叮
v -Jdux
W
.
町
耐寸
ZD
如
.""〕〕配
?
圄
"
n
.
-T-D
On刷刷"1
OnlnllOl.log
白‘"
m
e
i
.
儼
咀
10C BunON1 :BN CLlCICED
。N
響,
ON_\I而叫 INITD隊LO G
W OnP.lnt ON \1而叫 PAINT W OnOueryO r.glco" ON_\I州 OUERYORAGICON 二J
Oea國ptlon:
] C旦~
圖 18 .55通過 ClassWizard顯示可以為 Clock控件添加其響應的事件
當然,也可以在對話框資源上,在 Clock控件上單擊鼠標右鍵,從彈出的快捷菜單上選擇【 Events...】菜單項,這時將顯示如圖 18.56所示的對話框。同樣可以看到,可以為 Clock控件增加 Click和 NewMinute事件。如果想要增加某個事件,在該對話框中選中該事件,然后單擊【 Add Handler】或者【 Add and Edit】按鈕即可。
叫
詳
l~'11Ii呻E肌叫阿呵.2" m1.1J,,1Zbim,l'!I'ftmwuiii:í<<r.'I"a:lllil劇。-曲. .ll.
Itew 'NIndows me...ge機眠的咽 m叫
11lid:
NewMlnute
、
E
旦出
。.'.0'
-· o
EE
r
w-
a dn-
as-.,
m-
m-
e -"
rnuc…呻陽 OYO叫一…一一一
S
同日
陽
』悔自
翁"-
'
·
-
-F
-
,
m
-8
創
牛。
'
圖 18.56 Clock控件具有的事件
這里,我們為 Clock控件增加 Click和 NewMinute這兩個事件的處理。然后在這兩個事件的響應函數中,都調用 MessageBox函數彈出一個信息框,提示用戶當前發生的事件,具體實現代碼如例 18-23所示。
例 18-23
void CClockTestDlg : :OnClickClockctrll()
、
// TODO : Add your control notification handler code here
MessageBox( "control is clicked!"};
void CClockTestDlg : :OnNewMinuteClockctrll(}
// TODO: Add your control notification handler code here
MessageBox ("new minute! ") ;
Build并運行 ClockTest程序,在對話框上顯示的 Clock控件上單擊鼠標左鍵,這時彈出一個消息框,提示: "control is cIicked! "。井且當新的一分鐘到來時,程序會彈出一個消息框,提示: "new minute!"。
單擊對話框上的【 Buttonl】按鈕,這里對話框左上角將出現剛才動態創建的那個 Clock控件,用鼠標左鍵單擊該控件,程序并沒有彈出消息框。這是因為我們只對對話框上靜態創建的 Clock控件進行了事件響應。那么對動態創建的 Clock控件,應該如何響應它的事件呢?讀者應記得,先前在調用 Create函數創建該動態 Clock控件時,指定了它的囚,如果想對一個動態創建的 ActiveX控件的事件進行響應,讀者可以參看 ClockTestDlg叩p源文件中為靜態創建的 Clock控件自動生成的事件響應代碼(其中事件映射代碼如例 18-24
.
喝喝....... 1699
第 18
所示).然后試著自行完成。
例 18-24
BEGIN_EVENTSINK_MAP(CClockTestDlg , CDialog)
//{{AFX_EVENTSINK_MAP(CClockTestDlg)
ON_EVENT(CClockTestDlg,工 DC_CLOCKCTRL1, -600 /* Click * /, OnClick Clockctrll , VTS_NONE) ON_EVENT(CClockTestDlg , IDC_CLOCKCTRL1 , 1 /* NewM工 nute * /, OnNewMinute Clockctrll , VTS NONE) //}}AFX-EVENTS工 NK MAP END_EVENTS工 NK_MAP ()
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -