网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读

源代码在线查看: 18.7 activex 控件测试程序.txt

软件大小: 956 K
上传用户: kzdai22
关键词: TXT VC 目录
下载地址: 免注册下载 普通下载 VIP

相关代码

				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曲曲				团川 1111 k 
				a... 
								.!.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				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:í				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 () 
				
							

相关资源