基于绘图引擎的屏幕显示方法技术

技术编号:2836078 阅读:270 留言:0更新日期:2012-04-11 18:40
一种基于绘图引擎的画中画屏幕显示方法,用于在使用绘图引擎独占全屏绘图模式绘制的第二应用程序(P2)的画面之上显示第一应用程序(P1)的窗口,包括:在第一应用程序(P1)中设置系统消息挂钩,以便获取第二应用程序(P2)所使用的绘图引擎的图形绘制接口地址和属性设置接口地址,用重新实现的图形绘制接口和属性设置接口来替换原有接口;重新实现的属性设置接口获取绘图引擎的绘制模式,当绘制模式为“非拷贝模式”时,将其修改为“拷贝模式”;更改第二应用程序(P2)的窗口消息处理过程以屏蔽“失去焦点”消息;获取第一应用程序(P1)的窗口图形数据和第二应用程序(P2)的绘屏数据,并叠加这两部分数据;绘制叠加后的数据。

【技术实现步骤摘要】

本专利技术涉及一种。更具体地,本专利技术涉及一种基于绘图引擎的画中画屏幕显示方法。
技术介绍
计算机操作系统和应用软件通常不能直接调用显示设备和其中的图形加速功能,必须通过系统中的一组专用应用程序接口(API)来调用,这就是绘图引擎。绘图引擎可以通过显示设备驱动程序来操作显示设备,可以为操作系统和各种应用程序提供各种显示用接口函数和显示功能。操作系统和应用程序不需要知道计算机用的是什么显示设备,只需要调用绘图引擎所提供的接口函数和功能就能实现显示功能,通过这种分工合作,极大地降低了软件开发周期和成本。比如需要在显示器上画出一个三维的正方体,不需要程序人员针对不同的显卡而写大段的代码,只需要调用绘图引擎的一组函数并把一些相关的参数分配给它们,由它们来完成这个功能。目前开放的绘图引擎主要有微软提供的DDraw、D3D和IT业界多家公司共同制定的OPENGL。但是,当前很多需要屏幕绘制的应用程序以独占全屏模式运行,由于绘图引擎独占全屏模式的绘图特性的干扰,如果一个使用绘图引擎独占全屏模式绘制的应用程序正在运行,则其它任何同样需要在显示器屏幕绘制的应用程序就无法正常或不能显示其内容或界面。
技术实现思路
因此,为克服上述技术问题而提出了本专利技术。本专利技术的目的是提供一种基于绘图引擎的画中画屏幕显示方法,能在使用绘图引擎独占全屏绘图模式绘制的画面之上,显示其它应用程序的窗体。本专利技术的另一目的是,提供一种基于绘图引擎的画中画屏幕显示方法,能在使用绘图引擎独占全屏绘图模式绘制的画面之上,显示其它应用程序的窗体并与其自由交互。为此目的,本专利技术提供一种基于绘图引擎的画中画屏幕显示方法,用于在使用绘图引擎独占全屏绘图模式绘制的第二应用程序(P2)的画面之上显示第一应用程序(P1)的窗口,该方法包括下列步骤在第一应用程序(P1)中设置系统消息挂钩,以便获取第二应用程序(P2)所使用的绘图引擎的图形绘制接口地址和属性设置接口地址,用重新实现的图形绘制接口和属性设置接口来替换原有接口;所述重新实现的属性设置接口获取绘图引擎的绘制模式,当绘制模式为“非拷贝模式”时,将其修改为“拷贝模式”;更改第二应用程序(P2)的窗口消息处理过程以屏蔽“失去焦点”消息;由重新实现的图形绘制接口获取第一应用程序(P1)的窗口图形数据和第二应用程序(P2)的绘屏数据,并叠加这两部分数据;以及使绘图引擎按原有图形绘制接口在屏幕上绘制叠加后的混合数据。附图说明下面将参照在附图中所表示的非限制性实施例来进一步说明本专利技术,其中图1示出根据本专利技术的基于绘图引擎的画中画屏幕显示方法的详细流程图。图2示出根据本专利技术的基于绘图引擎的画中画屏幕显示方法的分层处理关系示意图。图3示出采用根据本专利技术的基于绘图引擎的画中画屏幕显示方法显示的应用程序窗体的实际运行效果示意图。图4示出采用根据本专利技术的基于绘图引擎的画中画屏幕显示方法显示的应用程序窗体的另一实际运行效果示意图。具体实施例方式图1示出根据本专利技术的基于绘图引擎的画中画屏幕显示方法的详细流程图。根据该流程图,如果应用程序P1要使用本方法来显示画中画效果,而应用程序P2使用绘图引擎E1并以独占全屏模式显示,则本专利技术的基于绘图引擎的画中画屏幕显示方法第一步首先在应用程序P1中设置系统消息挂钩(图1.A),以便P1在“全屏P2”启动时能够获取P2的进程地址。挂钩是操作系统中消息处理机制的一个要点,通过安装各种挂钩,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。挂钩的种类很多,每种挂钩可以截获并处理相应的消息,如键盘挂钩可以截获键盘消息,鼠标挂钩可以截获鼠标消息,外壳挂钩可以截获启动和关闭应用程序的消息,日志挂钩可以监视和记录输入事件。挂钩分为线程专用挂钩和全局挂钩,线程专用挂钩只监视指定的线程,要监视系统中的所有线程,必须用到全局挂钩。对于全局挂钩,挂钩函数必须包含在独立的动态链接库中,这样才能被各种相关联的应用程序调用。其中,设置系统消息挂钩的具体方法如下a)在P1中实现一个消息处理过程(MSGHandler0);b)调用系统应用程序接口(如SetWindowHook),将MSGHandler0的地址作为参数传给该接口以完成系统挂钩设置过程。 当系统消息挂钩截获到消息时,会把消息直接发给MSGHandler0,消息内容包括消息所属进程标识、消息类型和消息附加参数,MSGHandler0判断如果消息所属进程为P2,则从进程标识中获取P2所使用的E1的“图形绘制接口”和“属性设置接口”两个地址,用重新实现的图形绘制接口和属性设置接口(Implement)来替换原有接口实现(图1.B),并保存原有接口地址,以便完成绘制工作后回调原接口。当P2调用E1的图形绘制接口和属性设置接口时,由于原接口地址已经被Implement替换,所以程序将跳到Implement上继续执行,在Implement中进行如下操作(图1.C)a)获取原接口实际参数、b)对参数进行判断处理、c)用新的参数回调原接口。其中,Implement的“属性设置接口”工作原理如下当P2调用图形引擎E1的属性设置接口时(图1.F),Implement中实现的“属性设置接口”从参数中取得绘图引擎的绘制模式,当发现绘制模式为“非拷贝模式”时,将参数修改为“拷贝模式”,然后调用图形原有的属性设置接口将新的参数传回,这样做可以使绘图引擎允许修改绘图数据。Implement的“图形绘制接口”工作原理如下当P2调用图形引擎E1的图形绘制接口时,Implement中实现的“图形绘制接口”从参数中取得P2的图形数据,再从P1中取得窗口图形数据,然后将P1的图形数据和P2的图形数据合并为一幅图形数据,最后调用原来绘图引擎E1的图形绘制接口来完成图形数据的输出,从而实现画中画的效果。 因为P2是全屏模式运行,其独占了所有用户输入操作的消息(如鼠标、键盘等操作事件),而用户又需要在P1上进行交互操作,这就需要有一种机制允许用户的操作焦点在P1和P2之间自由切换,而原有独占模式下的P2在失去焦点的情况下可能会出现运行异常的情况,比如被最小化、强行关闭等,所以需要更改P2的窗口消息处理过程,以保证P1在不影响P2正常运行的情况下得到用户操作的操作焦点,具体实现如下a)实现一个窗口消息处理过程(MSGHandler2);b)调用系统应用程序接口(如SetWindowLong),将P2的窗口消息处理过程替换为MSGHandler2的地址,同时得到原P2的窗口消息处理过程地址;c)当P2收到窗口消息时,MSGHandler2判断是否为“失去焦点消息”,如果是就直接放弃本次消息处理,否则将消息原封不动地发送给原P2窗口消息处理过程。 上述步骤只是保证了P2允许用户在P1上操作,在下一步操作中,本方法采用设置消息屏蔽区的方法,让被P2完全遮挡的P1可以获取到用户的操作指令消息,具体实现如下a)当屏蔽区尚未确定或P1的窗口位置、大小变化时,Implement获取P1的窗口坐标和长宽信息数据(图1.H),b)用这些信息数据(图2.D)在P2的窗口消息层(图2.A)设置消息屏蔽区域(图2.B),该区域的坐标位置及大小与P1窗口完全重合,如本文档来自技高网...

【技术保护点】
一种基于绘图引擎的画中画屏幕显示方法,用于在使用绘图引擎独占全屏绘图模式绘制的第二应用程序(P2)的画面之上显示第一应用程序(P1)的窗口,该方法包括下列步骤:在第一应用程序(P1)中设置系统消息挂钩,以便获取第二应用程序(P2)所 使用的绘图引擎的图形绘制接口地址和属性设置接口地址,用重新实现的图形绘制接口和属性设置接口来替换原有接口;所述重新实现的属性设置接口获取绘图引擎的绘制模式,当绘制模式为“非拷贝模式”时,将其修改为“拷贝模式”;更改第二应用程 序(P2)的窗口消息处理过程以屏蔽“失去焦点”消息;由重新实现的图形绘制接口获取第一应用程序(P1)的窗口图形数据和第二应用程序(P2)的绘屏数据,并叠加这两部分数据;以及使绘图引擎按原有图形绘制接口在屏幕上绘制叠加后的混合 数据。

【技术特征摘要】

【专利技术属性】
技术研发人员:谢雷黄建峰肖南潘建
申请(专利权)人:北京壁虎科技有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1