一种提升GUI窗口刷新效率的方法技术

技术编号:15791685 阅读:125 留言:0更新日期:2017-07-09 21:41
本发明专利技术涉及图形用户界面技术领域,提出了一种提高窗口刷新效率的方法。在窗口移动过程中,会产生无效区域,需要实时更新。传统的方法是给窗口发送MSG_PAINT消息,并将无效区域的位置和大小作为参数传递。窗口收到消息后,调用绘图函数对无效区域进行重绘。重绘由软件完成,效率很低。本发明专利技术使用硬件的块拷贝功能,来进行无效区域的刷新,取代了复杂的软件绘图操作。在新建窗口时,创建备份buffer以缓存窗口的显示内容。当窗口的无效区域需要刷新时,通过硬件的块拷贝功能,将无效区域的数据从备份buffer拷贝到屏幕buffer。当窗口的显示内容更新时,备份buffer的内容也同步更新。按照本发明专利技术的方法,用硬件来取代软件,完成窗口无效区域的刷新,提高了窗口的刷新效率,也降低了CPU的负载率和系统功耗。

【技术实现步骤摘要】
一种提升GUI窗口刷新效率的方法
本专利技术涉及图形用户界面
,特别涉及图形用户界面的窗口刷新效率。
技术介绍
GUI全称是GraphicalUserInterfaces,即图形用户界面,指以图形方式显示的用户界面。GUI主要作用是提供应用编程接口(ApplicationProgrammingInterface,API)给应用程序,进行界面绘制和显示。窗口系统和消息机制是一种广泛使用的GUI实现方式,被用于Windows和各种嵌入式平台。图1是一种基于窗口系统和消息机制的GUI框架。中间部分为GUI的具体实现,其中窗口系统实现了窗口管理,显示组件是显示的必要元素,消息循环实现了消息的传递,显示抽象层和输入抽象层分别负责与显示驱动和输入驱动交互。窗口管理的主要任务是实现多个窗口在屏幕上的按序显示,并正确地响应用户输入。窗口管理包含三个重要概念:剪贴域、zorder(z序)和无效区域。窗口的剪贴域指窗口未被覆盖的区域集合;zorder描述窗口在z方向上的索引,所有窗口在z方向上形成单项链表,链表头是顶层窗口,链表尾是桌面窗口;无效区域指窗口需要刷新的区域。图2中有三个窗口,顶层是“Microsoft软件许可条款”窗口(简称“Microsoft”窗口),位于zorder链表头;中间是“关于画图”窗口(简称“关于”窗口);底层是桌面窗口,位于zorder链表尾。图3描述了窗口的剪贴域,“关于”窗口的剪贴域是区域301、303,“Microsoft”窗口的剪贴域是区域304,桌面窗口的剪贴域是区域302、305、306、307和308。当鼠标拖动图2中“Microsoft”窗口水平右移到图4中的位置时,会产生无效区域,401是“关于”窗口的无效区域,402是桌面窗口的无效区域。无效区域需要实时重绘,否则显示就不正常了。传统方法对401、402两个无效区域的重绘,是分别给两个窗口发送MSG_PAINT消息,并将区域401、402的位置和大小作为参数传递。窗口收到消息后,调用绘图函数对无效区域进行重绘。重绘是由纯软件来完成,效率很低。
技术实现思路
为了解决无效区域重绘效率低的问题,本专利技术提供了一种利用硬件块拷贝来实现无效区域重绘的方法,可以更快速地实现无效区域的刷新。本专利技术要求处理的目标系统满足以下条件:(1)使用了基于窗口系统和消息机制的图形用户界面;(2)硬件支持块拷贝功能。本专利技术解决其技术问题所采用的技术方案是:准备一些物理连续的内存空间,用于备份窗口的显示内容,称为备份buffer;与之对应,整个屏幕的显示buffer称为屏幕buffer。备份buffer用于缓存窗口的最新显示内容,其大小与屏幕buffer相同,个数可根据系统空闲内存大小来设置。按照图5的流程,为窗口创建备份buffer,并进行初始化。在刷新窗口的无效区域时,若窗口有备份buffer,则将无效区域的数据从备份buffer拷贝到屏幕buffer的指定位置,由硬件的块拷贝功能来完成;若窗口没有备份buffer,则还是走默认的软件处理流程,在窗口的回调函数中,对无效区域进行绘制。当窗口的zorder发生变化,由顶层窗口变为非顶层窗口时,将窗口的显示内容(最新)通过硬件拷贝到备份buffer,以维持备份buffer的内容最新。本专利技术的有益效果是:用硬件的块拷贝功能来代替软件的复杂绘图操作,大大提高了窗口无效区域的刷新效率,同时也降低了CPU的负载率和功耗。附图说明下面结合附图和实施例对本专利技术进一步说明。图1是一种基于窗口系统和消息机制的GUI框架。图2是一种多窗口的场景实例。图3是窗口的剪贴域示意图。图4是鼠标拖动窗口时产生的无效区域示意图。图5是窗口的备份buffer的创建流程图。图6是备份buffer的数据更新流程图。图7是无效区域的刷新流程图。具体实施方式首先为窗口创建备份buffer,并初始化备份buffer。501,新建窗口,完成后窗口位于顶层;502,判断窗口是否支持硬件刷新;503,判断是否存在剩余的备份buffer;504,分配备份buffer,并与当前窗口关联起来;505,将窗口的显示内容通过硬件拷贝到备份buffer。根据本专利技术的实施例,步骤502包括:若没有用户输入时,窗口的显示内容不会变化,则该窗口支持硬件刷新。假如窗口显示了一个毫秒计数器,一直在不停地更新,则备份buffer没有意义,因为等到后续需要刷新时,备份buffer的内容已过期,因此这种窗口就不支持硬件刷新。图7描述了窗口无效区域的刷新流程。701,窗口存在无效区域,需要刷新;702,判断窗口是否存在备份buffer;703,若存在备份buffer,则硬件从备份buffer拷贝指定无效区域的内容到屏幕buffer;704,若不存在备份buffer,则软件通过绘图函数进行无效区域的重新绘制。备份buffer需要缓存窗口最新的显示内容,当窗口的显示内容变化时,备份buffer的内容也要更新。图6是备份buffer的数据更新流程图。601,用户操作使窗口zorder发生变化,顶层窗口变为非顶层窗口;602,判断窗口是否存在备份buffer;603,判断窗口的显示内容是否有更新;604,若窗口的显示内容有更新,则将显示内容通过硬件拷贝到备份buffer。根据本专利技术的实施例,步骤603包括:判断窗口在处于顶层窗口的期间,是否有响应MSG_PAINT消息。若有响应,则说明窗口有新的绘图操作,其显示内容有更新,否则窗口的显示内容没有更新。本文档来自技高网
...
一种提升GUI窗口刷新效率的方法

【技术保护点】
一种提升GUI窗口刷新效率的方法,其特征在于,用备份buffer缓存窗口的显示内容,在窗口需要刷新时,使用硬件的块拷贝功能,将数据从备份buffer拷贝到屏幕buffer,实现窗口无效区域的刷新。

【技术特征摘要】
1.一种提升GUI窗口刷新效率的方法,其特征在于,用备份buffer缓存窗口的显示内容,在窗口需要刷新时,使用硬件的块拷贝功能,将数据从备份buffer拷贝到屏幕buffer,实现窗口无效区域的刷新。2.根据权利要求1所述的方法,其特征在于,若窗口在没有用户输入时,显示内容不会发生变化,则该窗口支持硬件刷新,否则就不支持...

【专利技术属性】
技术研发人员:刘刚
申请(专利权)人:珠海亿智电子科技有限公司
类型:发明
国别省市:广东,44

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

1