一种嵌入式窗口管理方法及装置\n技术领域\n[0001] 本发明涉及界面窗口显示领域,特别是涉及一种嵌入式窗口管理方法及装置。\n背景技术\n[0002] 图形用户界面或图形用户接口(Graphical User Interface,GUI)是指采用图形方式显示的计算机操作环境用户接口。与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用人们从此不再需要死记硬背大量的命令,取而代之的是可用通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。\n[0003] 目前,几乎没有单独的面向嵌入式的窗口管理系统,嵌入式窗口管理系统一般都是作为GUI系统的一个组件一起提供的。这种系统主要用于界面交互场景,因此无法实现分屏播放多媒体素材,特别是滚动播放。\n发明内容\n[0004] 本发明所要解决的技术问题是:提供一种嵌入式窗口管理方法,该方法能够实现在图形用户界面窗口中分屏滚动播放图片。\n[0005] 为了解决上述技术问题,本发明采用的技术方案为:\n[0006] 一种嵌入式窗口管理方法,包括步骤:\n[0007] 将屏幕分隔成两个以上窗口,所述每个窗口包括图片、窗口区域和剪切区域,所述窗口区域用于指示窗口在屏幕的显示位置,所述剪切区域用于指示窗口内图片的具体显示部分;\n[0008] 将预显示的文件转化成图片,并将所述图片加载到对应的窗口中;\n[0009] 更新屏幕显示区域,将与屏幕显示区域重叠的窗口图片更新到显存。\n[0010] 本发明的另一技术方案为,一种嵌入式窗口管理装置,该装置包括分屏模块、加载模块和显示模块;\n[0011] 所述分屏模块用于将屏幕分隔成两个以上窗口,所述每个窗口包括图片、窗口区域和剪切区域,所述窗口区域用于指示窗口在屏幕的显示位置,所述剪切区域用于指示窗口内图片的具体显示部分;\n[0012] 所述加载模块用于将预显示的文件转化成图片,并将所述图片加载到对应的窗口中;\n[0013] 显示模块用于更新屏幕显示区域,将与屏幕显示区域重叠的窗口图片更新到显存。\n[0014] 本发明的有益效果在于:区别于现有技术中嵌入式图形用户界面窗口内只用于界面交互,无法实现分屏滚动播放多媒体素材,本发明通过引入剪切区域,通过按一定步长更新剪切区域,使剪切区域指示图片的不同部分,并将剪切区域内的内容加载至显存中,使窗口内沿不同方向滚动播放图片,从而实现在图形用户界面窗口中滚动播放图片。\n附图说明\n[0015] 图1为本发明一实施方式中嵌入式窗口管理方法的执行流程图;\n[0016] 图2为本发明一实施方式中嵌入式窗口管理装置的功能框图;\n[0017] 图3为本发明一实施方式中窗口之间以及窗口与子窗口之间的逻辑关系图;\n[0018] 图4为本发明一实施方式中更新屏幕显示区域的执行流程图;\n[0019] 图5为本发明一实施方式中更新屏幕显示区域时,计算处于屏幕显示区域的窗口图片区域的公式;\n[0020] 图6为本发明一实施方式中按预设步长修改剪切区域起始坐标实现滚动效果的执行流程图;\n[0021] 图7为本发明一实施方式中采用窗口与子窗口,同时通过修改剪切区域和窗口区域配合实现滚动效果的示例图;\n[0022] 主要标号说明:\n[0023] 10-分屏模块;20-加载模块;30-显示模块。\n具体实施方式\n[0024] 为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。\n[0025] 本发明最关键的构思在于:引入剪切区域,使剪切区域指示图片的具体显示部分,通过更新剪切区域达到窗口内滚动播放图片。\n[0026] 请参阅图1,一种嵌入式窗口管理方法,包括步骤:\n[0027] S1、将屏幕分隔成两个以上窗口,所述每个窗口包括图片、窗口区域和剪切区域,所述窗口区域用于指示窗口在屏幕的显示位置,所述剪切区域用于指示窗口内图片的具体显示部分;\n[0028] S2、将预显示的文件转化成图片,并将所述图片加载到对应的窗口中;\n[0029] S3、更新屏幕显示区域,将与屏幕显示区域重叠的窗口图片更新到显存。\n[0030] 从上述描述可知,本发明的有益效果在于:本发明通过引入剪切区域,通过按一定步长更新剪切区域,使剪切区域指示图片的不同部分,并将剪切区域内的内容加载至显存中,使窗口内沿不同方向滚动播放图片,从而实现在图形用户界面窗口中滚动播放图片。\n[0031] 进一步的,在本实施方式中,所述步骤S3后还包括步骤S4:更改窗口区域;通过更改窗口区域可以达到修改窗口图片在屏幕的显示位置和可视部分。\n[0032] 在所述更新屏幕显示区域步骤之前还包括以下步骤:更换窗口区域内图片或按预设步长更新剪切区域。\n[0033] 进一步的,请参阅图6,在本实施方式中,所述按预设步长更新剪切区域的具体步骤包括:\n[0034] 设置所述剪切区域的位移量为x_scorll_index,其中,x_scorll_index的初值为\n0;\n[0035] 按预设步长更新所述剪切区域,计算所述剪切区域的位移量x_scorll_index;\n[0036] 判断剪切区域更新过程中,其剩余宽度是否小于一个预设步长,若是,则播放结束,若否,则继续按预设步长向剪切方向更新所述剪切区域。\n[0037] 在本实施方式中,设置剪切区域的起始位置为所述图片的起始地址,按预设步长更新剪切区域,将图片在新剪切区域的内容更新到显存中进行播放。所述更新剪切区域的方向为剪切区域从图片的左侧向图片的右侧移动,从而实现图片在窗口中从右向左滚动播放,在其他实施方式中,所述更新剪切区域的方向可以是从图片的右侧向左侧移动、从图片的下侧向上侧移动或从图片的上侧向下侧移动,从而实现窗口内沿不同方向滚动播放图片。\n[0038] 进一步的,所述更改窗口区域,实现滚动的具体步骤包括:\n[0039] 预设窗口的窗口区域的宽度是主窗口的窗口区域的宽度的两倍,窗口的窗口区域起始位置与主窗口的窗口区域起始位置重合;\n[0040] 然后按预设步长向左更新窗口的窗口区域超始位置,窗口的窗口区域超过主窗口的窗口区域无效,从而实现窗口的图片从右向左滚动。\n[0041] 预设子窗口的窗口区域的宽度是窗口的窗口区域的宽度的两倍,子窗口的窗口区域起始位置与窗口的窗口区域起始位置重合;\n[0042] 然后按预设步长向左更新子窗口的窗口区域超始位置,子窗口的窗口区域超过窗口的窗口区域无效,从而实现子窗口的图片从右向左滚动。\n[0043] 在本实施方式中,所述更改窗口区域的起始坐标为从右侧向左侧移动,从而实现图片从右向左滚动播放,在其他实施方式中,所述更改窗口区域的方向可以是从左侧向右侧移动、从下侧向上侧移动或从上侧向下侧移动,从而实现沿不同方向滚动播放图片。\n[0044] 进一步的,请参阅图3在本实施方式中,所述窗口为同一数组的元素,所述窗口设置有子窗口,所述每个窗口的子窗口形成一双向链表,所述子窗口包括图片、所述窗口区域和剪切区域。\n[0045] 所述窗口采用数组管理,一共可激活128个窗口,坐标越大,窗口越上层;子窗口采用链表管理,窗口和他所有的子窗口形成一个双向链表,头结点为窗口;离窗口越远的子窗口,窗口越上层。所述窗口设有一个特殊元素,用于标识窗口是否激活;子窗口设有两个特殊元素用于指示该子窗口的前结点和后结点。窗口0也叫做主窗口,所述主窗口用于在更新屏幕显示区域时,将窗口、以及窗口所包含的子窗口的内容更新到主窗口;通过所述主窗口将窗口、以及窗口所包含的子窗口的内容更新到显存;所述主窗口与显存的大小可以不一样,将数据更新到显存时,将自动缩放。其中,窗口的窗口区域超过主窗口的窗口区域的部分无效,子窗口的窗口区域超过窗口的窗口区域的部分无效。\n[0046] 在窗口中增设子窗口提高了窗口的显示能力,采用数组管理和链表管理大大方便了窗口之间以及窗口与子窗口的操作与管理。\n[0047] 本实施方式提供的针对窗口及子窗口的主要接口(API)包括:创建窗口、创建子窗口、销毁窗口、销毁子窗口、加载图片、取消加载图片、修改剪切区域、修改窗口区域和更新屏幕显示区域。\n[0048] 本实施方式提供的主要API包括:创建和销毁(父/子)窗口,加载图片,取消加载图片,修改图片剪切区域,更新屏幕显示区域。\n[0049] 创建窗口,需要传入数组坐标(范围1~127,窗口0是主窗口),如果当前窗口未激活,就激活当前窗口并返回成功;否则返回错误;\n[0050] 创建子窗口,需要传入前结点和后结点;子窗口需要动态分配,然后返回动态分配的子窗口;\n[0051] 加载图片,将图片以及图片的剪切区域传递给指定窗口;\n[0052] 修改图片剪切区域,如果窗口未加载过图片,直接返回错误;否则将新剪切区保存到窗口结点中,当应用程序更新显示区域时,将显示图片在新剪切区部分的内容;\n[0053] 修改窗口区域,当应用程序更新显示区域时,将取消息图片在原来窗口区域的显示,同时显示图片在新的窗口区域内。\n[0054] 进一步的,请参阅图4、图5在本实施方式中,更新屏幕显示区域的具体步骤包括:\n[0055] 遍历所述窗口以及窗口所包含的子窗口,确定处于激活状态的窗口以及所述窗口所包含的子窗口;\n[0056] 计算更新区域与所述处于激活状态的窗口以及所述窗口所包含的子窗口的重叠部分;\n[0057] 通过所述窗口区域、剪切区域和所述重叠部分计算出图片重叠区域;\n[0058] 将所述图片重叠区域的图片更新到主窗口;\n[0059] 将主窗口更新区域的图片更新到显存的相应区域。\n[0060] 因应用程序需经常对屏幕界面进行更新,本更新屏幕显示区域的技术方案可以在设有多层窗口子的图形界面上实现动态更新显示区域的画面。\n[0061] 本发明提供的另一技术方案为:\n[0062] 请参阅图2,一种嵌入式窗口管理装置,包括分屏模块10、加载模块20和显示模块\n30;\n[0063] 所述分屏模块10用于将屏幕分隔成两个以上窗口,所述每个窗口包括图片、窗口区域和剪切区域,所述窗口区域用于指示窗口在屏幕的显示位置,所述剪切区域用于指示窗口内图片的具体显示部分;\n[0064] 所述加载模块20用于将预显示的文件转化成图片,并将所述图片加载到对应的窗口中;\n[0065] 显示模块30用于更新屏幕显示区域,将与屏幕显示区域重叠的窗口图片更新到显存;本实施方式通过引入剪切区域,通过按一定步长更新剪切区域,使剪切区域指示图片的不同部分,并将剪切区域内的内容加载至显存中,从而实现在窗口内沿不同方向滚动播放图片的效果。\n[0066] 进一步的,在本实施方式中,所述嵌入式窗口管理装置还包括窗口更改模块,所述窗口更改模块用于更改窗口区域;通过更改窗口区域可以达到修改窗口图片在屏幕的显示位置和可视部分。\n[0067] 进一步的,所述显示模块30按预设步长更新剪切区域,包括设置单元、更新单元和判断单元;\n[0068] 所述设置单元用于设置所述剪切区域的位移量为x_scorll_index,其中,x_scorll_index的初值为0;\n[0069] 所述更新单元用于按预设步长更新所述剪切区域,计算所述剪切区域的位移量x_scorll_index;\n[0070] 所述判断单元用于判断剪切区域更新过程中,其剩余宽度是否小于一个预设步长,若是,则播放结束,若否,则继续按预设步长向剪切方向更新所述剪切区域。\n[0071] 进一步的,所述窗口为同一数组的元素,所述窗口设置有子窗口,所述每个窗口的子窗口形成一双向链表,所述子窗口包括图片、所述窗口区域和剪切区域。\n[0072] 进一步的,还包括更新屏幕显示区域模块,所述更新屏幕显示区域模块包括遍历单元、第一计算单元、第二计算单元、缩放单元和显存更新单元;\n[0073] 所述遍历单元用于遍历所述窗口以及窗口所包含的子窗口,确定处于激活状态的窗口以及所述窗口所包含的子窗口;\n[0074] 所述第一计算单元用于计算更新区域与所述处于激活状态的窗口以及所述窗口所包含的子窗口的重叠部分;\n[0075] 所述第二计算单元用于通过所述窗口区域、剪切区域和所述重叠部分计算出图片重叠部分(cacl_clip_rect);\n[0076] 所述缩放单元用于将所述图片重叠(cacl_clip_rect)区域的图片更新到主窗口;\n[0077] 所述显存更新单元用于将主窗口更新区域的图片更新到显存的相应区域。\n[0078] 下面结合一些示例来说明本发明\n[0079] 示例1:创建和销毁窗口\n[0080] 创建窗口:主要参数为数组坐标和窗口区域;通过数组坐标检查数组元素是否激活,如果未激活,就将数组元素标志改为激活,同时返回成功,否则返回错误;\n[0081] 当销毁窗口:主要参数为数组坐标;通过数组坐标检查数组元素是否激活,如果激活,就将数组元素标志改为未激活,同时返回成功,否则返回错误;\n[0082] 当创建子窗口:主要参数为前窗口结点和窗口区域;通过动态申请新窗口结点,然后将新窗口结点加入前窗口结点后面,构成双向链表;\n[0083] 当销毁子窗口:主要参数为子窗口结点;将子窗口结点从双向链表中移除,然后释放子窗口结点占用的内存。\n[0084] 示例2:加载图片\n[0085] 加载图片所需的参数包括:窗口、图片数据、剪切区;\n[0086] 判断窗口是否已经加载过图片,若是,则直接返回错误,若否,则将图片数据和剪切区保存到窗口结点中。\n[0087] 示例3:修改图片剪切区域,实现滚动播放图片\n[0088] 修改图片剪切区域所涉及的参数包括:窗口和剪切区域;\n[0089] 1)判断窗口是否已加载图片,若否,则返回错误,若是,则将新剪切区保存到窗口结点中,当应用程序更新显示区域时,将显示图片在新剪切区部分的内容。请参阅图6,假设有一个窗口,窗口区域为(x,y,width,height),x_scorll_index=0,每次滚动像素为mv;\n[0090] 2)加载一张宽为width*3,高为height的图片给窗口,初始化剪切区域为(0,0,width,height);\n[0091] 3)当x_scroll_index>width*2时,跳到4);否则,更新剪切区域为(x_scroll_index,0,width,height),同时将图片在新剪切区域的内容更新到显存,x_scroll_index+=mv,重复步骤3);\n[0092] 4)播放结束。\n[0093] 示例4:请参阅图4,更新屏幕显示区域\n[0094] 更新屏幕显示区域所涉及的参数包括:更新的区域;\n[0095] 1)将主窗口的更新区域update_rect填充透明色,接着需要从窗口1开始检查到\n127,将处于激活状态且处于更新区域内的窗口和子窗口图片更新到主窗口;\n[0096] 2)当正在检查的窗口处于未激活状态,跳到5);否则,如果窗口区域和更新区域没有重叠部分,跳到5);否则,计算出重叠部分cacl_rect。然后通过窗口区域,剪切区域和cacl_rect计算出cacl_clip_rect(参考图5,主要用于计算图片显示的部分);最后将cacl_clip_rect区域的图片缩放到主窗口的cacl_rect区域;\n[0097] 3)当正在检查的窗口有子窗口,如果窗口区域和窗口区域以及更新区域没有重叠部分,跳到4);否则,计算出重叠部分cacl_rect。然后通过窗口区域,剪切区域和cacl_rect计算出cacl_clip_rect(cacl_clip_rect主要用于计算图片显示的部分);最后将cacl_clip_rect区域的图片缩放到主窗口的cacl_rect区域;\n[0098] 4)如果窗口还有子窗口,再跳到3);\n[0099] 5)判断是否有下一个窗口,如果有跳到2);\n[0100] 6)将主窗口更新区域的图片更新到显存的相应区域。\n[0101] 示例5:请参阅图7,采用窗口和子窗口配合,修改剪切区域和窗口区域配合,实现走马灯效果,可以用于需要播放走马灯场景。\n[0102] 1)预设屏幕显示区域为(x,y,w,h),图片大小为(0,0,img_w,img_h),图片宽度img_w不小于显示区域宽度w,图片高度img_h等于显示区域高度h;\n[0103] 2)第一张图片和第二张图片用背景色填充,从第三张图片开始写文本;\n[0104] 3)创建一个窗口,窗口的窗口区域为(x,y,w,h),窗口图片为第一张图片,剪切区域为(0,0,w,h);\n[0105] 4)创建一个子窗口1,子窗口1的窗口区域为(x,y,w,h),窗口图片为第二张图片,剪切区域为(img_w-w,0,w,h);\n[0106] 5)创建一个子窗口2,子窗口2的窗口区域为(x+w,y,w,h),窗口图片为第三张图片,剪切区域为(0,0,w,h);\n[0107] 6)假设位移为scroll_index=0;步长为scroll_mv;\n[0108] 7)当scroll_indeximg_w,文本未滚完,置子窗口1的窗口区域为(x,y,w,h),窗口图片换为子窗口2的图片,剪切区域为(img_w-w,0,w,h),置子窗口2的窗口区域为(x+w,y,w,h),窗口图片换为新的图片,剪切区域为(0,0,w,h),跳到6);如果文本已经滚完,播放结束。\n[0110] 综上所述,本发明提供的嵌入式窗口管理方法及装置能够实现在图片用户界面中分屏滚动播放图片,所述嵌入式图片用户界面中的窗口包括多层子窗口,每个子窗口都可滚动播放图片,并且通过主窗口可实现在多层窗口部分或完全重叠时更新屏幕显示区域。\n[0111] 以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。