首页 理论教育 如何选择、创建和删除虚拟控件

如何选择、创建和删除虚拟控件

时间:2023-06-28 理论教育 版权反馈
【摘要】:为了进行仪器拼搭,首先从虚拟控件工具箱或“控件”菜单中选择调用所需的虚拟控件,然后在仪器拼搭场内框选区域,以确定虚拟控件在仪器拼搭场中的位置,创建控件。图10-28是虚拟控件创建流程图。创建完成虚拟控件之后,若用户觉得该类控件在自己的仪器中不合适,可将该控件删除。但不论哪一种方式,都牵涉到一个删除被创建的同类型基本虚拟控件中特定虚拟控件实例的问题。图10-29 虚拟控件类的层次结构

如何选择、创建和删除虚拟控件

仪器拼搭场初始化之后,功能库和虚拟控件库已经挂接到仪器拼搭场,并且三者之间已建立了相应的联系,此时便可进行仪器的拼搭了。

为了进行仪器拼搭,首先从虚拟控件工具箱或“控件”菜单中选择调用所需的虚拟控件,然后在仪器拼搭场内框选区域,以确定虚拟控件在仪器拼搭场中的位置,创建控件。在这里,实际就是通过查找虚拟控件表中与所选虚拟控件对应的节点,然后调用该节点对应的pCreatePointer接口函数,从而创建出需要的虚拟控件。图10-28是虚拟控件创建流程图

978-7-111-33186-5-Part01-429.jpg

图10-28 虚拟控件创建流程图

在许多情况下,需要用同一个虚拟控件模型创建多个不同表现形式的虚拟控件,例如在一个虚拟控件化仪器中,往往要用到多个按钮,这可由各个基本虚拟控件模型的内部来解决。在仪器拼搭场来内,创建同类型虚拟控件的一个或几个则是一样的,都是调用虚拟控件的pCreatePointer接口函数。实际上,在每个基本虚拟控件模型库内部都有一套独立的计数机制,表明该类控件被创建的数目,同时给各个被创建的控件分配一个相对(只需相对对应的基本虚拟控件模型)全局唯一标志ID,从而区分出同一类虚拟控件的各个具体应用实例。创建完成虚拟控件之后,若用户觉得该类控件在自己的仪器中不合适,可将该控件删除。这里有两种删除方式:一种是在仪器拼搭场中,调用pDeletePointer接口函数;另一种是在各个基本虚拟控件库内部,实现自删除。但不论哪一种方式,都牵涉到一个删除被创建的同类型基本虚拟控件中特定虚拟控件实例的问题。这里和创建虚拟控件的过程有所不同。在这两种方式中,都运用到控件创建时所分配的局部唯一标志ID。如果是在仪器拼搭场通过框选需要删除的控件进行删除,则是首先得到所选控件的全局窗口句柄,进而得到该控件在相应控件类中的局部唯一标志ID,根据这个标志ID,从该控件类已创建控件表中移去相应节点,最后通过调用基本控件库的pDeletePointer接口函数,从仪器拼搭场实际删除这个基本控件实例。对于第二种方式,无需首先得到窗口全局句柄,只需直接将要删除控件的局部标志ID与它所在的基本控件库已创建控件表中各个节点ID比较,如果相同,则移去该节点,然后直接调用控件的窗口销毁函数DestoryWindow。在删除过程中,关键的一点是要在已创建控件实例表中移去相应节点,为此每类控件有一个实例对象管理表,由控件自行管理其实例对象。

创建接口定义为:(www.xing528.com)

typedef int(WINAPICreateCtl)(CWndpWnd,CRect rect);其中,pWnd为拼搭场窗口指针,rect为框选区域。

typedef int(WINAPIDeleteCtl)(int ID);其中,ID即为所删除的控件实例对象的ID号。

而就虚拟控件本身的具体实现来讲,它具有如图10-29所示的层次结构。

978-7-111-33186-5-Part01-430.jpg

图10-29 虚拟控件类的层次结构

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈