发明内容
本发明要解决的技术问题在于,针对现有客户端软件界面实现效率较低的缺陷,提供一种客户端软件运行的***和方法。
本发明解决其技术问题所采用的技术方案是:构造一种客户端软件运行的***,包括运行窗口应用程序的界面层模块和功能层模块,以及Active X组件构成的中间层模块:
所述窗口应用程序的界面层模块运行嵌入窗口应用程序的Html代码生成客户端软件界面,并通过嵌入窗口应用程序的JavaScript代码捕捉该客户端软件界面上的触发事件,并将获得的触发事件的消息通过Active X组件转发给窗口应用程序的功能层模块;
所述窗口应用程序的功能层模块根据触发事件的消息执行窗口应用程序的消息处理代码,获取反馈结果,并将反馈结果的消息通过Active X组件转发给所述窗口应用程序的界面层模块通过所述客户端软件界面进行显示。
在根据本发明所述的客户端软件运行的***中,所述中间层模块的ActiveX组件具有中间层消息处理单元,并具有使用内存映射文件的消息池;所述中间层消息处理单元对所述内存映射文件进行管理,使得所述界面层模块和功能层模块对内存映射文件的内容进行读出或者写入。
在根据本发明所述的客户端软件运行的***中,所述界面层模块进一步包括:
Html单元,用于运行嵌入窗口应用程序的Html代码生成客户端软件界面,并接收反馈结果的消息通过所述客户端软件界面进行显示;
JavaScript单元,用于通过嵌入窗口应用程序的JavaScript代码捕捉所述客户端软件界面上的触发事件;以及
界面层消息处理单元,与所述Html单元、JavaScript单元和中间层模块的中间层消息处理单元相连,用于将所述JavaScript单元获取的触发事件的消息转发给所述中间层消息处理单元,并将从所述中间层消息处理单元获得的反馈结果的消息发送给所述Html单元进行显示。
在根据本发明所述的客户端软件运行的***中,所述功能层模块进一步包括:
消息执行单元,用于根据触发事件的消息执行窗口应用程序的消息处理代码,获取反馈结果;
功能层消息处理单元,用于将从中间层模块的中间层消息处理单元获得的触发事件的消息发送给所述消息执行单元,并将从所述消息执行单元得到的反馈结果的消息发送给所述中间层消息处理单元。
在根据本发明所述的客户端软件运行的***中,所述中间层模块的ActiveX组件内部建立有异步消息发送接口;所述界面层模块和功能层模块发送的触发事件和反馈结果的消息用于通过所述异步消息发送接口写入所述内存映射文件中。
在根据本发明所述的客户端软件运行的***中,且所述中间层模块的ActiveX组件内部建立有消息池监控处理单元和自定义消息映射宏接口;所述消息池监控处理单元用于监控消息池,判断是否检测到有效的消息;所述中间层消息处理单元通过所述自定义消息映射宏接口在消息池监控处理单元监控到有效消息时,相应转发给界面层模块或功能层模块。
本发明还提供了一种客户端软件运行的方法,包括以下步骤:
S1、窗口应用程序的界面层模块运行嵌入窗口应用程序的html代码生成客户端软件界面,并通过嵌入窗口应用程序的JavaScript代码捕捉该客户端软件界面上的触发事件;
S2、所述界面层模块将获得的触发事件的消息通过Active X组件转发给窗口应用程序的功能层模块;
S3、所述窗口应用程序的功能层模块根据触发事件的消息执行窗口应用程序的消息处理代码,获得反馈结果;
S4、所述功能层模块将反馈结果的消息通过Active X组件转发给所述窗口应用程序的界面层模块通过所述客户端软件界面进行显示。
在根据本发明所述的客户端软件运行的方法中,所述Active X组件构成中间层模块;所述步骤S2和S4中,所述中间层模块的Active X组件内部具有中间层消息处理单元,并具有使用内存映射文件的消息池;所述中间层消息处理单元对所述内存映射文件进行管理,使得所述界面层模块或功能层模块对内存映射文件的内容进行读出或者写入。
在根据本发明所述的客户端软件运行的方法中,所述步骤S2和S4中,所述中间层模块的ActiveX组件内部建立有异步消息发送接口;所述界面层模块和功能层模块发送的触发事件和反馈结果的消息用于通过所述异步消息发送接口写入所述内存映射文件中。
在根据本发明所述的客户端软件运行的方法中,所述步骤S2和S4中,所述中间层模块的ActiveX组件内部建立有消息池监控处理单元和自定义消息映射宏接口;所述消息池监控处理单元用于监控消息池,判断是否检测到有效的消息;所述中间层消息处理单元通过所述自定义消息映射宏接口在消息池监控处理单元监控到有效消息时,相应转发给界面层模块或功能层模块。
实施本发明的客户端软件运行的***和方法,具有以下有益效果:本发明利用微软的ActiveX组件可以同时被客户端软件和脚本语言使用的特点,结合Html设计界面元素的优点,通过ActiveX组件实现消息的转发,既可以快速响应界面变化,又能满足高难度的界面元素设计,还不影响其交互灵活性。且可以在ActiveX中使用内存映射文件作为客户端界面的窗口应用程序的功能层和Html界面元素的消息池进行通讯。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。
请参阅图1,为根据本发明的优选实施例中客户端软件运行的***的模块示意图。如图1所示,该客户端软件运行的***包括运行窗口应用程序的界面层模块10和功能层模块20,以及由Active X组件构成的中间层模块30。
下面对本发明提供的客户端软件的创建过程进行具体说明,包括以下步骤:
步骤1:首先使用基于Windows操作***的窗口应用程序作为程序框架,即设计一个支持Html的窗口应用程序。以MFC为例,使用向导生成一个对话框程序,选择“use html dialog”选项。
步骤2:使用Html+JavaScript的方式设计程序界面,其包括:使用html语言进行软件界面元素的布局,使用JavaScript进行辅助实现交互效果。将设计完的Html网页嵌入步骤1中设计的窗口应用程序框架中;
步骤3:创建ActiveX组件,作为窗口应用程序框架和Html网页的通讯中间件。以MFC为例,在向导中选择MFC/MFC ActiveX Control。在设计完成ActiveX组件后,将该ActiveX组件注册至Windows操作***上,这样该接口才可以被窗口应用程序和Html+JavaScript调用使用ActiveX组件。
在上述基于web的客户端软件界面设计完成后,该设计完的客户端软件界面以Html网页形式显示,并设计为客户端软件界面的外观。在设计完后即可通过如图1所示的客户端软件运行的***运行该客户端软件。
窗口应用程序的界面层模块10用于运行嵌入窗口应用程序的Html代码生成客户端软件界面。该界面层模块10还通过嵌入窗口应用程序的JavaScript代码捕捉该客户端软件界面上的触发事件,并将获得的触发事件的消息通过中间层模块30的Active X组件转发给窗口应用程序的功能层模块20。
窗口应用程序的功能层模块20根据触发事件的消息执行窗口应用程序的消息处理代码,获取反馈结果,并将反馈结果的消息通过中间层模块30的Active X组件转发给窗口应用程序的界面层模块20通过客户端软件界面进行显示。
在本发明提供的客户端软件运行的***中,中间层模块30是采用内存映射文件32作为消息池。在创建软件时,在ActiveX组件内使用内存映射文件作为消息池,用来管理消息的接收和发送,以及部分数据的交换。具体为在ActiveX组件内部,分配一块内存空间,使用该空间生成内存映射文件。ActiveX组件还具有中间层消息处理单元31,由中间层消息处理单元31对内存映射文件32进行管理,使得界面层模块10和功能层模块20对内存映射文件的内容进行读出或者写入。其中的内容可以根据功能层模块20和界面层模块10的Html网页约定好的格式,称为通讯协议,进行解析。
中间层模块30的ActiveX组件内部建立有异步消息发送接口(PostMessage接口)实现消息写入功能。其实现的功能就是向内存映射文件32(即消息池)写入约定好格式的消息体。即界面层模块10和功能层模块30发送的触发事件和反馈结果的消息用于通过该PostMessage接口写入所述内存映射文件中。
中间层模块30的ActiveX组件内部还建立有消息池监控处理单元和自定义消息映射宏接口(OnMessage接口)。该消息池监控处理单元用于监控作为消息池的内存映射文件,判断是否检测到有效的消息。中间层消息处理单元31通过该OnMessage接口在消息池监控处理单元监控到有效消息时,相应转发给界面层模块10或功能层模块20。
请参阅图1,界面层模块10进一步包括:Html单元13、JavaScript单元12和界面层消息处理单元11。
其中,所述Html单元13用于运行上述嵌入窗口应用程序的Html代码生成Html网页形式的客户端软件界面。且Html单元13在接收到中间层模块30转发的功能层模块20的反馈结果的消息后,还通过改客户端软件界面进行显示。
JavaScript单元12用于通过嵌入窗口应用程序的JavaScript代码捕捉Html网页形式的客户端软件界面上的触发事件,例如鼠标事件。例如,用户在Html网页即设计完的客户端软件界面上点击一个扫描注册表错误的按钮。JavaScript单元12捕捉到该鼠标事件,通过事件响应函数生成触发事件的消息,如MSG_SCAN_REGISTER_ERR(自定义消息,可以为字符串)的消息。
界面层消息处理单元11,与Html单元13、JavaScript单元12和中间层消息处理单元31相连,将JavaScript单元12获取的触发事件的消息转发给中间层消息处理单元31,再由中间层消息处理单元31在activex组件内部通过PostMessage接口将该触发事件的消息写入消息池。界面层消息处理单元13还将从中间层消息处理单元31通过OnMessage接口获得的反馈结果的消息发送给Html单元13进行显示。
功能层模块20进一步包括:功能层消息处理单元21和消息执行单元22。其中,功能层消息处理单元21与中间层消息处理单元31和消息执行单元22相连,用于将从中间层消息处理单元31通过OnMessage接口获得的触发事件的消息发送给消息执行单元22。再由该消息执行单元22接收到该触发事件的消息,例如判断到是一个扫描注册表错误的指令,执行窗口应用程序的消息处理代码,即进行注册表扫描,并生成反馈结果的消息,如SCAN_FINISH消息。扫描完成,功能层模块20的功能层消息处理单元21通过中间层消息处理单元31的PostMessage接口向消息池(内存映射文件)中写入该SCAN_FINISH消息。
下面对本发明的客户端软件运行的方法的具体过程进行说明。该客户端软件也需要通过前述的客户端软件的创建过程的步骤进行创建。该设计完的客户端软件界面以Html网页形式显示,并设计为客户端软件界面的外观。在设计完后即可通过如下客户端软件运行的方法运行该客户端软件。
首先,在步骤S1中,窗口应用程序的界面层模块运行嵌入窗口应用程序的html代码生成客户端软件界面,并通过嵌入窗口应用程序的JavaScript代码捕捉该客户端软件界面上的触发事件。
随后,在步骤S2中,界面层模块将获得的触发事件的消息通过Active X组件转发给窗口应用程序的功能层模块。
随后,在步骤S3中,窗口应用程序的功能层模块根据触发事件的消息执行窗口应用程序的消息处理代码,获得反馈结果。
最后,在步骤S4中,功能层模块将反馈结果的消息通过Active X组件转发给所述窗口应用程序的界面层模块通过所述客户端软件界面进行显示。
请参阅图2,为根据本发明的客户端软件运行的方法的具体流程图。如图2所示,该客户端软件运行的方法的具体步骤包括:
首先,在步骤S201中,界面层模块通过以Html生成的客户端软件界面获取触发事件例如鼠标事件。例如,用户在Html网页即设计完的客户端软件界面上点击一个扫描注册表错误的按钮。JavaScript单元捕捉到该鼠标事件,通过事件响应函数生成触发事件的消息,如MSG_SCAN_REGISTER_ERR(自定义消息,可以为字符串)的消息。该步骤对应上述步骤S1的功能。
随后,在步骤S202中,在ActiveX组件内部通过PostMessage接口将该触发事件的消息写入消息池。在该方法中,中间层模块为由ActiveX组件构成的中间通讯件,并采用内存映射文件作为消息池。在创建软件时,在ActiveX组件内使用内存映射文件作为消息池,用来管理消息的接收和发送,以及部分数据的交换。具体为在ActiveX组件内部,分配一块内存空间,使用该空间生成内存映射文件。ActiveX组件还具有中间层消息处理单元,由中间层消息处理单元对内存映射文件进行管理,使得界面层模块和功能层模块对内存映射文件的内容进行读出或者写入。其中的内容可以根据功能层模块和界面层模块的Html网页约定好的格式,称为通讯协议,进行解析。
中间层模块的ActiveX组件内部建立有异步消息发送接口(PostMessage接口)实现消息写入功能。其实现的功能就是向内存映射文件(即消息池)写入约定好格式的消息体。即界面层模块和功能层模块发送的触发事件和反馈结果的消息用于通过该PostMessage接口写入所述内存映射文件中。
随后,在步骤S203中,中间层模块的中间层消息处理单元通过OnMessage接口得知检测有效的消息来到消息池,取出该消息发送给功能层模块。步骤S202和步骤S203完成了上述步骤S2的功能。中间层模块的ActiveX组件内部还建立有消息池监控处理单元和自定义消息映射宏接口(OnMessage接口)。该消息池监控处理单元用于监控作为消息池的内存映射文件,判断是否检测到有效的消息。中间层消息处理单元通过该OnMessage接口在消息池监控处理单元监控到有效消息时,相应转发给功能层模块。
随后,在步骤S204中,功能层模块接收到该触发事件的消息,执行窗口应用程序的消息处理代码,生成反馈结果的消息。例如,功能层模块接收到该触发事件的消息,例如判断到是一个扫描注册表错误的指令,执行窗口应用程序的消息处理代码,即进行注册表扫描,并生成反馈结果的消息,如SCAN_FINISH消息。该步骤对应上述步骤S3的功能。
随后,在步骤S205中,在activex组件内部通过PostMessage接口将该反馈结果的消息写入消息池。例如,写入上述SCAN_FINISH消息。
随后,在步骤S206中,中间层消息处理单元通过OnMessage接口得知检测有效的消息来到消息池,取出该反馈结果的消息发送给界面层模块。
随后,在步骤S207中,界面层模块将接收的反馈结果的消息通过所述客户端软件界面进行显示。步骤S205、步骤S206和步骤S207完成了上述步骤S4的功能。
本发明是根据特定实施例进行描述的,但本领域的技术人员应明白在不脱离本发明范围时,可进行各种变化和等同替换。此外,为适应本发明技术的特定场合或材料,可对本发明进行诸多修改而不脱离其保护范围。因此,本发明并不限于在此公开的特定实施例,而包括所有落入到权利要求保护范围的实施例。