在建设窗体时,拥有扩展属性WS_EX_LAYERED的窗体就是分层窗体了。通过度层窗体,我们可以实现异形、具有alpha值的窗体,别的还能为窗体实现行动,办理了以往的纯静态窗体的现实。对付分层窗体的画图机制,可以有两种选择,其一是回收以往的WM_PAINT动静响应机制及局部刷新技能,但这种要领无法实现异形窗体。其二就是利用UpdateLayeredWindow函数,将画图事情由系统托管,用户只需汇报系统需要绘制哪些图像;
三、结论
一、引言
二、异形窗体与局部刷新技能
1.1分层窗体简介
本文在理会分层窗体和UpdateLayeredWindow的基本上,操作双界面合成的要领模仿实现异形界面的局部刷新,彻底办理了异形窗体的刷新问题,为DirectUI实现异形窗体打扫了一大障碍,为界面库的研究提供了新要领,新思路。
2.4将最新绘制的控件及其配景按照更新区域巨细举办裁剪;(步调四)
1.2 UpdateLayeredWindow函数简介及现存问题
2.5将裁剪后的图像与原图像抠图举办合成,形成最终的软件界面;(步调五)
2.双界面合成要领模仿实现局部刷新
通过研究分层窗体,实现结局部刷新技能,办理了当前所有的界面库都无法建设异形的问题,别的在此基本上,在画图时,可以利用GDI+绘画技能,而不会呈现穿透性问题,同时办理了GDI+与异形窗体的融合性问题。虽然对付界面库而言,鼓起时间也不长,对付异形窗体的实现更是具有难度的,我相信对付异形窗体的研究会呈现更多的成就,就要靠各人在实践中逐步探索了。
UpdateLayeredWindow改变了以往窗体绘制方法,由于每次画图都要由UpdateLayeredWindow来操纵,所以每次我们都要画出当前的整个应用措施界面,这就导致每次都要从头绘制整个窗体。这样就引起了我们引言中讲到的CPU占用高的问题。正是由于这个问题,当今的所有开源界面库全部都没有基于UpdateLayeredWindow来实现界面,虽然也就无法实现异形,所以对付异形窗体,如何实现局部刷新是必需要办理的。
如图一所示,原界面上有三个按钮控件,均为椭圆状,虚线框暗示每个控件的巨细,实际并不存在,这里要实现的结果是,当用户点击第一个控件时,将其改酿成另一样式(菱形),双界面合成要领实现局部刷新的进程如下:
2.1首先,生存原界面;(步调一)
通过上节的讲授,全部刷新是由于UpdateLayeredWindow自身实现的问题,所以我们无法变动,所以我们只有回收模仿的要领来实现局部刷新。
UpdateLayeredWindow函数是WIN32 API里成果很是强大的一个函数。通过在内存DC上作画,然后把该DC通报给UpdateLayeredWindow,系统就会托管后头的图像储存、压缩、渲染等事情,而且所有的画图事情都由UpdateLayeredWindow来执行,也就是说你在内存DC上画了什么,就会显示出来什么[2]。
跟着计较机的成长,当今用户对应用软件不再仅仅满意于成果的完善,并且对用户界面友好性、雅观性要求越来越高。所以,以往的桌面应用措施开拓并不能满意这些界面开拓要求,这就致使越来越多的界面库的涌现,而现今的界面库多半基于DirectUI的设计思想[1],但由于原有窗体是法则的,所以基础无法实现异形窗体。跟着微软分层窗体的设计思想及UpdateLayeredWindow函数的呈现,异形窗体的实现才真正成为大概。但由于UpdateLayeredWindow自己的特性导致每次都必需全部重绘整个措施界面,所以即即是一个像素的改变,都将导致整个窗体的刷新,这对付CPU的占用长短常庞大的,尤其在大型软件中,这将是劫难性的。
众所周知,在WINDOWS措施中,画图DC是与画布相关联的,只要我们的画布不销毁,界面就不会改变。所以,我们先生存上次的画布,为合成最新的画布做筹备。
2.2建设一个姑且画布,并在其上画出当前最新的控件样式及其配景;(步调二)
1.异形窗体简介
2.6将最终的软件界面通报给UpdateLayeredWindow显示出来即可;