界面库纳入新的窗口风格(Vista)

界面库纳入新的窗口风格(Vista)

忙和了很久,学到很多东西,2007过得还算充实,2008不知道是否可以逃过劫难,常常做恶梦,希望2008快快过去半年,哪时候是好是坏都有了结果。

在2007年上半年,曾经看到过Yahoo的新版本Messager的界面,非常的个性化,这类异形窗口效果是传统窗口所无法实现的。而异形窗口的实现一般有两种方法:1、通过SetWindowRgn 2、UpdateLayeredWindow。第一种方法很通用,但是做出的效果不是非常绚丽,由于计算机表达Rgn的局限,做出的界面时常有毛刺而影响视觉效果。UpdateLayeredWindow只实用于32位带alpha通道的图片,由于Windows直接拿图片与桌面进行叠加透明处理,所以窗口边缘的毛刺一般可通过阴影消除掉。使用UpdateLayeredWindow后的窗口将不在响应WM_PAINT消息,这是一个非常棘手的问题,解决办法是创建一个顶层窗口用来承载子界面,将Layered窗口置于其下并控制其位置。加之之前的界面库,引入具有这样特性的一类窗口也不是难事。

当然我的实现思想也是采取UpdateLayeredWindow:首先创建一个32位的和窗口大小一致的位图,然后贴png图片,绘制窗口界面元素,最后进行窗口层更新,这样就有了无窗口的一套界面解决方案。但是有时候,由于各种原因是需要常规Window的,所以还得把常规的窗口界面纳入进来。

有了思路就开始动手改造,下载其他的软件研究,上网学习一些相关技术。用了两天,基本移植进来,此次用了GDIPlus,也不管tmd跨不跨平台了。
界面描述:

<? xml version="1.0" encoding="utf-8" ?>
< Window >
    
< VerticalLayout >
        
< Canvas  height ="38"  bgimage ="\App\res\top.png" >
      
< VerticalLayout >
        
< HorizontalLayout ></ HorizontalLayout >
        
< HorizontalLayout  height ="32" >
          
< VerticalLayout ></ VerticalLayout >
          
< VerticalLayout  width ="61" >
            
< ImageButton  normalimg ="\App\res\btclose1.png"  hotimg ="\App\res\btclose2.png"  downimg ="\App\res\btclose3.png"  tooltip ="Close"  name ="close" ></ ImageButton >
          
</ VerticalLayout >
          
< VerticalLayout  width ="25" ></ VerticalLayout >
        
</ HorizontalLayout >
      
</ VerticalLayout >
    
</ Canvas >
    
< Canvas  bgimage ="\App\res\mid.png" ></ Canvas >
    
< Canvas  height ="25"  bgimage ="\App\res\bottom.png" ></ Canvas >
    
</ VerticalLayout >
</ Window >


下面是截图:

界面库纳入新的窗口风格(Vista)_第1张图片

界面库纳入新的窗口风格(Vista)_第2张图片

界面库纳入新的窗口风格(Vista)_第3张图片

至于所谓的磨砂效果,其实就是blur模糊。由于UpdateLayerWindow只允许你提供一个自己的位图,之后会自动为你进行图片合成,合成方法无法参与,故想实现blur恐怕要大废一番力气,很可能要抛弃这套流出而模拟出一套。

下一步工作就是创建一个顶层窗口,跟随这个漂亮的外壳移动了。之前的界面描述机制也自然可以进来了。

exe下载

你可能感兴趣的:(界面库纳入新的窗口风格(Vista))