第1讲 第三章 组件技术概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章组件技术概述3.2引言组件的关键特性组件必须是一个独立编译的环境,它不能是函数库或源代码必须能集成组件以创建一个更大的程序。组件必须能够嵌入容器,而且必须为组件和容器之间提供通信机制。组件技术必须支持属性、方法和事件,或者某种等价的通信方法。组件技术应该支持持久性属性。在设置时能够设置属性值,并在激活组件时,能够将设置值作为属性的初始值。组件应描述其自身接口。应能够通过查询组件来确认它所支持的属性、方法和事件。组件应可以在各种不同的环境中使用。3.3简单控件概念:是一种可插入对话框的组件,例如,按钮、文本框简单控件拥有自己的窗口,该窗口必须嵌入到另一个称为父窗口的窗口中。最长用的通信方式是在控件和父窗口之间传递消息。主动传递、被动传递消息控件的容器也称为控件的父窗口,可以截获和处理来自控件的消息。例子:用消息为控件设置属性值//SetRadioButtonvalueHWNDhWndDrawMode=GetDlgItem(IDC_DRAWMODE);HWNDhWndDrawMode1=GetDlgItem(IDC_DRAWMODE1);if(DrawMode){SendMessage(hWndDrawMode,BM_SETCHECK,BST_UNCHECKED,0);SendMessage(hWndDrawMode1,BM_SETCHECK,BST_CHECKED,0);}else{SendMessage(hWndDrawMode,BM_SETCHECK,BST_CHECKED,0);SendMessage(hWndDrawMode1,BM_SETCHECK,BST_UNCHECKED,0);}例子:用消息从控件获取属性值HWNDhWndDrawMode1=GetDlgItem(IDC_DRAWMODE1);BOOLDrawMode=SendMessage(hWndDrawMode1,BM_GETCHECK,0,0);3.4VBXVBX技术是建立在简单控件所用的消息传递机制之上。VBX技术支持属性、事件和方法,但是,他支持的方法必须从一个预定义的方法名列表中选取,这些方法的参数也是预先定义好的每个VBX都有一个消息处理函数VB使用的组件是VBX。不过VBX架构非常的复杂,只能使用在16位的环境,定义的VBX规格简直是一团混乱,根本像是拼凑出来的东西。开发VBX组件痛苦不堪,后来Microsoft也彻底放弃了VBX。32位操作系统不再支持VBX3.5ACTIVEX随着Windows95的出现,诞生了一项新技术——OLE技术。OLE缺点:运行速度慢,尺寸大,价格昂贵。改进OLE过程中,出现了新的工具和标准,名为ActiveXActiveX基础是组件对象模型(ComponentObjectModel,简称COM)COM是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。开发COM的目的是为了使应用程序更易于定制、更为灵活。ACTIVEX-续AcitveX组件需要实现大量不同的接口,但其中最重要的是Idispatch接口IDispatch接口用于实现属性、方法和事件Idispatch接口定义了许多必须由各ActiveX组件实现的函数,其中最重要的是Invoke函数,该函数用于访问属性、方法和触发事件。属性有两种实现方式:即实现为可直接修改的属性和实现为虚拟属性虚拟属性拥有两个函数,一个函数设置属性值,另一个获取属性值(get和set函数)使用VC++6.0的MFC向导创建属性和方法增加属性longLineWidth(Membervariable)增加属性longVecorCount(Get/Setmethods)增加方法BOOLSetElement(LPCTSTRElemID,floatNewValue)增加事件BadInput(shortItemCode)P3-5Xoom产生的代码longm_lineWidth;//属性成员变量afx_msgvoidOnLineWidthChanged();/////afx_msglongGetVectorCounter();afx_msgvoidSetVectorCounter(longnNewValue);/////afx_msgBOOLSetElement(LPCTSTRElemID,floatNewValue);///////voidFireBadInput(shortItemCode){FireEvent(eventidBadInput,EVENT_PARAM(VTS_I2),ItemCode);}产生代码-续voidCProj3_5XoomCtrl::OnLineWidthChanged(){//TODO:AddnotificationhandlercodeSetModifiedFlag();}longCProj3_5XoomCtrl::GetVectorCounter(){//TODO:Addyourpropertyhandlerherereturn0;}产生代码-续voidCProj3_5XoomCtrl::SetVectorCounter(longnNewValue){//TODO:AddyourpropertyhandlerhereSetModifiedFlag();}BOOLCProj3_5XoomCtrl::SetElement(LPCTSTRElemID,floatNewValue){//TODO:AddyourdispatchhandlercodeherereturnTRUE;}3.6COM/DCOMCOM是ActiveX控件的基础——每个ActiveX都是一个COM组件所有的COM都必须实现IUnkown接口IUnkown接口实现了3个函数:AddRef函数,Release函数和QueryInterface函数前两个函数通过增减引用数控制对接口的访问,第三个函数用于查询COM对象所提供的额外接口。DCOM,即分布式COM,它是COM的扩展,他可以支持不同计算机上组件对象和客户程序间或者组件对象之间的相互通信。ActiveX控件是COM技术的一个具体实现其他组件JavaBeans可能是继ActiveX之后最重要的组件技术Delphi组件也称为可视化组件库(VisualComponentLibrary,简称VCL)组件.NET组件还提供了Windows窗体组件(WindowsFormsComponent)CORBA不是组件技术,但是CORBA对象共享了组件的许多特性习题使用VC++6.0的MFC向导创建ActiveX组件,并为其增加属性、方法和事件

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功