一种多文档界面的转换方法以及相关装置的制作方法

文档序号:6425428阅读:124来源:国知局
专利名称:一种多文档界面的转换方法以及相关装置的制作方法
技术领域
本发明涉及计算机领域,尤其涉及一种多文档界面的转换方法以及相关装置。
背景技术
为了便于用户的操作,现有的软件普遍支持多文档界面(MDI, MultipleDocumentInterface)技术,使得用户可以在不关闭当前窗体的情况下,在各个子窗体中自由切换。ActiveX组件是指一种可执行的代码或程序,在主程序中可能同时插入了多个ActiveX组件,将ActiveX组件内窗体与调用它的主程序融合成为MDI子窗体,使得用户在主程序窗体内通过点击“窗体”菜单内的MDI子窗体列表菜单项切换操作不同ActiveX组件的窗体。
在现有技术中,主要通过下列两种方法将ActiveX组件的窗体转换为主程序的MDI子窗体第一种,将需要调用的ActiveX组件的窗体迁移到主程序中,将迁移过来的ActiveX组件的窗体直接设置为主程序窗体的MDI子窗体,使得主程序与ActiveX组件使用相同的功能界面;第二种,先将ActiveX组件(如果组件类型为ActiveX DLL先将类型改为ActiveXOCX)的窗体转化为与主程序具有相同功能和界面的自定义控件,然后在主程序中添加一个MDI子窗体作为该自定义控件的父窗体,程序在运行过程中动态地将该自定义控件加载到MDI子窗体。上述的两种方法虽然都实现了 ActiveX组件的窗体转换为主程序的MDI子窗体的目的,但都需要对主程序或ActiveX组件进行改造,破坏原有程序的结构,转化细节繁琐容易出错;而且,对每一种ActiveX组件都需要进行单独地改造,不具有复用性。

发明内容
本发明实施例提供了一种多文档界面的转换方法以及相关装置,用于将ActiveX组件的窗体转换为主程序的MDI子窗体。本发明提供的多文档界面的转换方法,包括当主程序启动后,子类化所述主程序的窗体;若ActiveX组件被调用,贝U加载所述ActiveX组件,并子类化所述ActiveX组件的窗体;所述ActiveX组件为在所述主程序中扩展的一种功能附件;在所述主程序的窗体中创建多文档界面MDI子窗体,并子类化所述MDI子窗体;将子类化后的所述ActiveX组件的窗体嵌入到子类化后的所述MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。本发明提供的多文档界面的转换装置,包括第一子类化单元,用于当主程序启动后,子类化所述主程序的窗体;加载单元,用于当ActiveX组件被调用时,加载所述ActiveX组件;第二子类化单元,用于在加载ActiveX组件之后,子类化所述ActiveX组件的窗体;以及在创建MDI子窗体之后,子类化所述MDI子窗体;创建单元,用于子类化所述ActiveX组件的窗体之后,在所述主程序的窗体中创建多文档界面MDI子窗体;嵌入单元,用于在子类化所述MDI子窗体之后,将子类化后的所述ActiveX组件的窗体嵌入到子类化后的所述MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。从以上技术方案可以看出,本发明实施例具有以下优点本发明提供了一种多文档界面的转换装置,该转换装置是一种连接主程序和ActiveX组件的桥梁插件;在主程序中调用ActiveX组件之后,该转换装置在主程序的窗体中创建MDI子窗体且对其进行子类化,并通过子类化该主程序和ActiveX组件的窗体,获取该主程序和ActiveX组件的窗体状态,使得该转换装置可以控制该主程序和ActiveX组件的窗体行为,将子类化后的ActiveX组件的窗体嵌入到子类化后的MDI子窗体内,从而将该ActiveX组件的窗体行为与该MDI子窗体的窗体行为关联到一起,完成ActiveX组件的窗体向MDI子窗体的转化。由于本发明使用的是一种第三方插件关联ActiveX组件与主程序的技术,ActiveX组件的窗体可以直接在原主程序的基础上转换为MDI子窗体,不容易出错,且多种ActiveX组件的窗体都可以复用该转换装置进行MDI子窗体的转换,提高了 ActiveX组件窗体转换的效率。


图I是本发明实施例中多文档界面的转换方法的一个流程示意图;图2是本发明实施例中多文档界面的转换方法的另一个流程示意图;图3是本发明实施例中多文档界面的转换装置的逻辑结构示意图。
具体实施例方式本发明实施例提供了一种多文档界面的转换方法以及相关装置,用于将ActiveX组件的窗体转换为主程序的MDI子窗体。请参阅图1,本发明实施例中多文档界面的转换方法的一个实施例包括101、子类化主程序的窗体;当主程序启动后,多文档界面的转换装置子类化该主程序的窗体。Windows是一个基于消息的系统,消息在Windows的对象之间相互传递;子类化技术用于截获窗体或控件之间的消息,子类化是消息达到目的窗体之前完成的操作,那些被截获的消息可以被保留,也可以被修改,该消息进行相应的处理后,继续发送。简单的说,子类化就是创建一个新的窗体消息处理过程,并将其插入到原先的默认窗体消息处理过程之
N / .刖。该转换装置对该主程序的窗体进行子类化,即使用该转换装置中自定义的窗体函数的地址替换原主程序的窗体函数的地址,使得该转换装置可以获取到主程序的窗体行为,便于后续对该主程序的窗体执行控制操作。该窗体行为包括窗体的放大、缩小以及关闭等。102、加载并子类化ActiveX组件窗体;在主程序启动后,若用户调用了 ActiveX组件,则多文档界面的转换装置可以识别到具体是哪一个ActiveX组件被调用,根据该ActiveX组件的功能信息加载该ActiveX组件,并子类化该ActiveX组件的窗体。ActiveX组件是在主程序中扩展的一种功能附件,可以另外安装在主程序中,以丰富该主程序的功能。如步骤101所述,在子类化该ActiveX组件的窗体之后,多文档界面的转换装置可以截获与该ActiveX组件的窗体相关的消息(如用户对该ActiveX组件的窗体的控制消息),从而获取到ActiveX组件的窗体行为,可以对ActiveX组件的窗体进行相应的控制。对ActiveX组件的窗体进行子类化可以对该ActiveX组件的窗体进行控制的同时,也可以避免对ActiveX组件的原程序进行修改,减小了程序出错的可能性。103、创建MDI子窗体;在子类化主程序的窗体以及ActiveX组件的窗体之后,多文档界面的转换装置在该主程序的窗体中创建MDI子窗体,并对该MDI子窗体进行子类化。在现有技术中,一般的应用程序都具备同时打开多个子窗体的功能,而在本发明中,在用户调用ActiveX组件之后,在主程序的窗体中可以创建MDI子窗体(由于多文档界 面的转换装置已经对主程序的窗体进行子类化,故可以对主程序的窗体行为进行控制),则该主程序的窗体为该MDI子窗体的主窗体,而此时的MDI子窗体为一个空白的窗体,即该MDI子窗体此时不具有业务功能。由于该子窗体是基于主程序的主窗体创建的,因此不会像现有技术那样因修改主程序内容而产生错误。104、嵌入ActiveX组件的窗体。在创建了 MDI子窗体之后,多文档界面的转换装置将子类化后的ActiveX组件的窗体嵌入到子类化后的MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。当ActiveX组件的窗体被子类化后,多文档界面的转换装置截获系统对该Ac t i veX组件窗体的各种指令消息,对该Ac t i veX组件的窗体进行控制;具体为,将Ac t i veX组件窗体的操作界面推送到上述主程序的MDI子窗体内,以ActiveX组件的具体操作界面填充该MDI子窗体,使得该MDI子窗体实现业务功能,该业务功能即ActiveX组件的业务功能,并将该ActiveX组件的窗体行为关联该MDI子窗体的窗体行为(由于该MDI子窗体已经被子类化,故也该MDI子窗体的窗体行为也可以被控制),使得该ActiveX组件的窗体与该MDI子窗体具有相同的控制逻辑,则用户在该MDI子窗体进行操作时,同时也是对该ActiveX组件进行操作。本发明提供了一种多文档界面的转换装置,该转换装置是一种连接主程序和ActiveX组件的桥梁插件;在主程序中调用ActiveX组件之后,该转换装置在该主程序的窗体中创建MDI子窗体且对其进行子类化,并通过子类化该主程序和ActiveX组件的窗体,获取该主程序和ActiveX组件的窗体状态,使得该转换装置可以控制该主程序和ActiveX组件的窗体行为,将子类化后的ActiveX组件的窗体嵌入到子类化后的MDI子窗体内,从而将该ActiveX组件的窗体行为与该MDI子窗体的窗体行为关联到一起,完成ActiveX组件的窗体向MDI子窗体的转化。由于本发明使用的是一种第三方插件关联ActiveX组件与主程序的技术,ActiveX组件的窗体可以直接在原主程序的基础上转换为MDI子窗体,不容易出错,且多种ActiveX组件的窗体都可以复用该转换装置转换为主程序的MDI子窗体,提高了ActiveX组件窗体转换的效率。在实际应用中,并非所有ActiveX组件的窗体都可以转换为MDI子窗体,故为了避免MDI子窗体转换的过程出错,本发明实施例还提供了 MDI子窗体转换的判断机制,具体请参阅图2,本发明实施例中多文档界面的转换方法的另一个实施例包括201、子类化主程序的窗体;当主程序启动后,第一桥梁插件子类化该主程序的窗体。多文档界面的转换装置可以分为第一桥梁插件和第二桥梁插件,该第一桥梁插件加载在主程序上,该第二桥梁插件加载在ActiveX组件上;当第一桥梁插件和第二桥梁插件分别加载在主程序和ActiveX组件上之后,第一桥梁插件和第二桥梁插可以相互识别对方的操作。202、加载并子类化ActiveX组件窗体;在主程序启动后,若用户调用了 ActiveX组件,则主程序上的第一桥梁插件根据该ActiveX组件的功能信息加载该ActiveX组件,在ActiveX组件加载完成后,第二桥梁插 件子类化该ActiveX组件的窗体。203、判断是否能转换为MDI子窗体;第二桥梁插件判断ActiveX组件的窗体是否能转换为MDI子窗体,若能,则触发步骤204 ;若不能,则终止转换的过程。在加载该ActiveX组件之后,第二桥梁插件识别该ActiveX组件的窗体类型,如判断该ActiveX组件的窗体是否为模态窗体,若是,则该ActiveX组件的窗体不能转换为MDI子窗体;若否,则该ActiveX组件的窗体能转换为MDI子窗体。模态窗体指的是用户必须在该窗体上完成相应的操作或对该窗体执行关闭操作后才能返回的窗体;反之,则为非模态窗体。由于模态窗体具有固定的边框大小,无法转化为MDI子窗体,因此,为了避免发生错误,当检测到ActiveX组件的窗体为模态窗体时,终止转换的过程。此外,作为可选的方案,当主程序限定了 MDI子窗体打开的数量时,第二桥梁插件会判断当前主程序中MDI子窗体的打开数目是否达到门限值,若是,则ActiveX组件的窗体不能转换为MDI子窗体;若否,则所述ActiveX组件的窗体能转换为MDI子窗体。在实际应用中,判断ActiveX组件的窗体是否能转换为MDI子窗体还可以使用其它的限制条件,具体此处不作限定。204、创建MDI子窗体;当第二桥梁插件判定当前的ActiveX组件窗体可以转换为MDI子窗体之后,第二桥梁插件在该主程序的窗体中创建MDI子窗体,并对该MDI子窗体进行子类化。205、嵌入ActiveX组件的窗体;在创建了 MDI子窗体之后,第二桥梁插件将子类化后的ActiveX组件的窗体嵌入到子类化后MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。当ActiveX组件的窗体被子类化后,第二桥梁插件截获系统对该ActiveX组件窗体的各种指令消息,对该ActiveX组件的窗体进行控制;具体为,将ActiveX组件窗体的操作界面推送到上述主程序的MDI子窗体内,以ActiveX组件的具体操作界面填充该MDI子窗体,使得该MDI子窗体实现业务功能,该业务功能即ActiveX组件的业务功能,并将该ActiveX组件的窗体行为关联该MDI子窗体的窗体行为(由于该MDI子窗体已经被子类化,故第二桥梁插件也可以对该MDI子窗体的窗体行为进行控制),使得该ActiveX组件的窗体与该MDI子窗体具有相同的控制逻辑,则用户在该MDI子窗体进行操作时,同时也是对该ActiveX组件进行操作。206、调整ActiveX组件的窗体。第二桥梁插件根据主程序窗体的大小调整ActiveX组件窗体的位置和大小。由于原ActiveX组件窗体和主程序窗体的大小可能不一致,为了便于用户在统一的界面内操作,第二桥梁插件会根据主程序窗体的大小自适应的调整ActiveX组件窗体的位置和大小,使得原ActiveX组件的边框和标题栏被隐藏,这样使得主程序整体的操作界面更加和谐。在本发明实施例中,增加了 ActiveX组件窗体是否能转化为MDI子窗体的判断机制和调整ActiveX组件窗体大小的机制,使得MDI子窗体的转化更加的合理,出错率更低,提高了用户的可操作性。
下面对用于执行上述多文档界面的转换方法的本发明SDP消息推送装置实施例进行说明,其逻辑结构请参考图3,本发明实施例中多文档界面的转换装置的一个实施例包括第一子类化单元301,用于当主程序启动后,子类化该主程序的窗体;第一子类化单元301属于第一桥梁插件的部分;加载单元302,用于检测到ActiveX组件被调用时,加载该ActiveX组件;第二子类化单元303,用于在加载ActiveX组件之后,子类化该ActiveX组件的窗体;以及在创建MDI子窗体之后,子类化该MDI子窗体;第二子类化单元303属于第二桥梁插件的部分;创建单元304,用于子类化ActiveX组件的窗体之后,在主程序的窗体中创建多文档界面MDI子窗体;嵌入单元305,用于在子类化MDI子窗体之后,将子类化后的ActiveX组件的窗体嵌入到子类化后的MDI子窗体内,使得该ActiveX组件的窗体作为主程序的MDI子窗体被显示和操作。本发明实施例中多文档界面的转换装置还可以进一步包括窗体调整单元306,用于根据主程序的窗体的大小调整ActiveX组件的窗体的位置和大小;判断单元307,用于判断ActiveX组件的窗体是否能转换为MDI子窗体,若能,则触发创建单元304 ;若不能,则终止转换的过程。本发明实施例多文档界面的转换装置中各个单元具体的交互过程如下当主程序启动时,第一子类化单元301子类化该主程序的窗体。子类化窗体即为创建一个新的窗体消息处理过程,并将其插入到原先的默认窗体消息处理过程之前。在子类化主程序的窗体之后,第一桥梁插件可以获取到主程序的窗体行为,便于后续对该主程序的窗体执行控制操作。该窗体行为包括窗体的放大、缩小以及关闭等。若用户调用了 ActiveX组件,则加载单元302根据该ActiveX组件的功能信息加载该ActiveX组件,且触发第二子类化单元303子类化该ActiveX组件的窗体,使得第二桥梁插件可以对该ActiveX组件的窗体行为进行控制。在子类化ActiveX组件的窗体之后,创建单元303在该主程序的窗体中创建MDI子窗体,并触发第二子类化单兀302子类化该MDI子窗体。可选的,在子类化该ActiveX组件的窗体之后,创建MDI子窗体之前,可由判断单元306判断ActiveX组件的窗体是否能转换为MDI子窗体,若能,则触发创建单元304,若不能,则终止转换的过程。在加载单元302加载该ActiveX组件之后,第二桥梁插件可以识别出该ActiveX组件的窗体类型,如若该ActiveX组件的窗体为模态窗体,则该ActiveX组件的窗体不能转换为MD I子窗体;若该Ac t i veX组件的窗体不是模态窗体,则该Ac t i veX组件的窗体能转换为MDI子窗体。此外,当主程序限定了 MDI子窗体打开的数量时,判断单元307还可以判断当前主程序中MDI子窗体的打开数目是否达到门限值,若是,则ActiveX组件的窗体不能转换为MDI子窗体;若否,则所述ActiveX组件的窗体能转换为MDI子窗体。在实际应用中,判断ActiveX组件的窗体是否能转换为MDI子窗体还可以使用其它的限制条件,具体此处不作限定。在创建了 MDI子窗体之后,嵌入单元305将子类化后的ActiveX组件的窗体嵌入到子类化后的MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。 当ActiveX组件的窗体被子类化后,第二桥梁插件截获系统对该ActiveX组件窗体的各种指令消息,对该ActiveX组件的窗体进行控制;具体为,将ActiveX组件窗体的操作界面推送到上述主程序的MDI子窗体内,以ActiveX组件的具体操作界面填充该MDI子窗体,使得该MDI子窗体实现业务功能,该业务功能即ActiveX组件的业务功能,并将该ActiveX组件的窗体行为关联该MDI子窗体的窗体行为(由于该MDI子窗体已经被子类化,故也可以对该MDI子窗体的窗体行为进行控制),使得该ActiveX组件的窗体与该MDI子窗体具有相同的控制逻辑,则用户在该MDI子窗体进行操作时,同时也是对该ActiveX组件进行操作。可选的,在将ActiveX组件的窗体嵌入到主程序的MDI子窗体后,窗体调整单元306根据主程序窗体的大小调整ActiveX组件窗体的位置和大小。在本申请所提供的几个实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可 轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
权利要求
1.一种多文档界面的转换方法,其特征在于,包括 当主程序启动后,子类化所述主程序的窗体; 若ActiveX组件被调用,则加载所述ActiveX组件,并子类化所述ActiveX组件的窗体;所述ActiveX组件为在所述主程序中扩展的一种功能附件; 在所述主程序的窗体中创建多文档界面MDI子窗体,并子类化所述MDI子窗体; 将子类化后的所述ActiveX组件的窗体嵌入到子类化后的所述MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。
2.根据权利要求I所述的方法,其特征在于,所述将ActiveX组件的窗体嵌入到所述MDI子窗体内之后包括 根据所述主程序的窗体的大小调整所述ActiveX组件的窗体的位置和大小。
3.根据权利要求I或2所述的方法,其特征在于,所述在主程序的窗体中创建MDI子窗体之前包括 判断所述ActiveX组件的窗体是否能转换为MDI子窗体,若能,则触发所述在主程序的窗体中创建MDI子窗体的步骤;若不能,则终止转换的过程。
4.根据权利要求3所述的方法,其特征在于,所述判断ActiveX组件是否能转换为MDI子窗体具体为 判断所述ActiveX组件的窗体是否为模态窗体,若是,则所述ActiveX组件的窗体不能转换为MDI子窗体;若否,则所述ActiveX组件的窗体能转换为MDI子窗体。
5.根据权利要求3所述的方法,其特征在于,所述判断ActiveX组件是否能转换为MDI子窗体具体为 判断所述MDI子窗体的打开数目是否达到门限值,若是,则所述ActiveX组件的窗体不能转换为MDI子窗体;若否,则所述ActiveX组件的窗体能转换为MDI子窗体。
6.一种多文档界面的转换装置,其特征在于,包括 第一子类化单元,用于当主程序启动后,子类化所述主程序的窗体; 加载单元,用于当ActiveX组件被调用时,加载所述ActiveX组件; 第二子类化单元,用于在加载ActiveX组件之后,子类化所述ActiveX组件的窗体;以及在创建MDI子窗体之后,子类化所述MDI子窗体; 创建单元,用于子类化所述ActiveX组件的窗体之后,在所述主程序的窗体中创建多文档界面MDI子窗体; 嵌入单元,用于在子类化所述MDI子窗体之后,将子类化后的所述ActiveX组件的窗体嵌入到子类化后的所述MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括 窗体调整单元,用于根据所述主程序的窗体的大小调整所述ActiveX组件的窗体的位置和大小。
8.根据权利要求6或7所述的装置,其特征在于,所述装置还包括 判断单元,用于判断所述ActiveX组件的窗体是否能转换为MDI子窗体,若能,则触发创建单元;若不能,则终止转换的过程。
全文摘要
本发明实施例公开了一种多文档界面的转换方法以及相关装置,用于将ActiveX组件的窗体转换为主程序的MDI子窗体。本发明实施例方法包括当主程序启动后,子类化所述主程序的窗体;若ActiveX组件被调用,则加载所述ActiveX组件,并子类化所述ActiveX组件的窗体;所述ActiveX组件为在所述主程序中扩展的一种功能附件;在所述主程序的窗体中创建多文档界面MDI子窗体,并子类化所述MDI子窗体;将子类化后的所述ActiveX组件的窗体嵌入到子类化后的所述MDI子窗体内,使得所述ActiveX组件的窗体作为所述主程序的MDI子窗体被显示和操作。此外,本发明还提供了实现该方法的相关装置。
文档编号G06F3/048GK102810041SQ20111014730
公开日2012年12月5日 申请日期2011年6月2日 优先权日2011年6月2日
发明者李国彬 申请人:深圳市金蝶友商电子商务服务有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1