基于LayeredWindow的异形窗体局部刷新.doc

上传人:gs****r 文档编号:1865612 上传时间:2019-03-18 格式:DOC 页数:4 大小:104KB
下载 相关 举报
基于LayeredWindow的异形窗体局部刷新.doc_第1页
第1页 / 共4页
基于LayeredWindow的异形窗体局部刷新.doc_第2页
第2页 / 共4页
基于LayeredWindow的异形窗体局部刷新.doc_第3页
第3页 / 共4页
基于LayeredWindow的异形窗体局部刷新.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、1基于 LayeredWindow 的异形窗体局部刷新摘 要:通过对现存界面库的分析,解释当前异形窗体的创建与刷新的难点,及刷新时 CPU 占用率高的问题,通过对 updateLayeredwindow接口的深度剖析,阐述了利用双界面合成的方法来模拟局部刷新。采用先对局部窗体重绘,然后与原界面合成的方法,大量减小了刷新时的重绘量,从而大幅度减轻了 CPU 的占用率。 关键词:界面 异形窗体 updateLayeredwindow 局部刷新 中图分类号:TP3011.11 文献标识码:A 文章编号:1003-9082(2014)02-0001-02 一、引言 随着计算机的发展,当今用户对应用软件

2、不再仅仅满足于功能的完善,而且对用户界面友好性、美观性要求越来越高。所以,以往的桌面应用程序开发并不能满足这些界面开发要求,这就致使越来越多的界面库的涌现,而现今的界面库大都基于 DirectUI 的设计思想1,但由于原有窗体是规则的,所以根本无法实现异形窗体。随着微软分层窗体的设计思想及 UpdateLayeredWindow 函数的出现,异形窗体的实现才真正成为可能。但由于 UpdateLayeredWindow 本身的特性导致每次都必须全部重绘整个程序界面,所以即便是一个像素的改变,都将导致整个窗体的刷新,这对于 CPU 的占用是非常巨大的,尤其在大型软件中,这将是灾难性的。 2本文在解

3、析分层窗体和 UpdateLayeredWindow 的基础上,利用双界面合成的方法模拟实现异形界面的局部刷新,彻底解决了异形窗体的刷新问题,为 DirectUI 实现异形窗体扫除了一大障碍,为界面库的研究提供了新方法,新思路。 二、异形窗体与局部刷新技术 1.异形窗体简介 1.1 分层窗体简介 在创建窗体时,拥有扩展属性 WS_EX_LAYERED 的窗体就是分层窗体了。通过分层窗体,我们可以实现异形、具有 alpha 值的窗体,另外还能为窗体实现动作,解决了以往的纯静态窗体的现实。对于分层窗体的绘图机制,可以有两种选择,其一是采用以往的 WM_PAINT 消息响应机制及局部刷新技术,但这种

4、方法无法实现异形窗体。其二就是使用UpdateLayeredWindow 函数,将绘图工作由系统托管,用户只需告诉系统需要绘制哪些图像; 1.2 UpdateLayeredWindow 函数简介及现存问题 UpdateLayeredWindow 函数是 WIN32 API 里功能非常强大的一个函数。通过在内存 DC 上作画,然后把该 DC 传递给 UpdateLayeredWindow,系统就会托管后面的图像储存、压缩、渲染等工作,并且所有的绘图工作都由 UpdateLayeredWindow 来执行,也就是说你在内存 DC 上画了什么,就会显示出来什么2。 UpdateLayeredWind

5、ow 改变了以往窗体绘制方式,由于每次绘图都要由 UpdateLayeredWindow 来操作,所以每次我们都要画出当前的整个应3用程序界面,这就导致每次都要重新绘制整个窗体。这样就引起了我们引言中讲到的 CPU 占用高的问题。正是由于这个问题,当今的所有开源界面库全部都没有基于 UpdateLayeredWindow 来实现界面,当然也就无法实现异形,所以对于异形窗体,如何实现局部刷新是必须要解决的。 2.双界面合成方法模拟实现局部刷新 通过上节的讲解,全部刷新是由于 UpdateLayeredWindow 自身实现的问题,所以我们无法更改,所以我们只有采用模拟的方法来实现局部刷新。 如图

6、一所示,原界面上有三个按钮控件,均为椭圆状,虚线框表示每个控件的大小,实际并不存在,这里要实现的效果是,当用户点击第一个控件时,将其改变成另一样式(菱形) ,双界面合成方法实现局部刷新的过程如下: 2.1 首先,保存原界面;(步骤一) 众所周知,在 WINDOWS 程序中,绘图 DC 是与画布相关联的,只要我们的画布不销毁,界面就不会改变。所以,我们先保存上次的画布,为合成最新的画布做准备。 2.2 创建一个临时画布,并在其上画出当前最新的控件样式及其背景;(步骤二) 2.4 将最新绘制的控件及其背景根据更新区域大小进行裁剪;(步骤四) 2.5 将裁剪后的图像与原图像抠图进行合成,形成最终的软

7、件界面;(步骤五) 42.6 将最终的软件界面传递给 UpdateLayeredWindow 显示出来即可; 三、结论 通过研究分层窗体,实现了局部刷新技术,解决了当前所有的界面库都无法创建异形的问题,另外在此基础上,在绘图时,可以使用 GDI+绘画技术,而不会出现穿透性问题,同时解决了 GDI+与异形窗体的融合性问题。当然对于界面库而言,兴起时间也不长,对于异形窗体的实现更是具有难度的,我相信对于异形窗体的研究会出现更多的成果,就要靠大家在实践中慢慢摸索了。 参考文献 1BjarkeViksoe.UI: Become windowless.20011-9-16 .http:/www.viksoe.dk/code/windowless1.htm 2 VadimGorokhovsky, Lou Amadio .MSDNLayeredWindow.2010-7 http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 学科论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。