万星星@豌豆荚 欢迎加入我们
一个吃软饭的男人!!!!!我只想写程序####
微博:http://weibo.com/wanlianwen
posts - 172,  comments - 1253,  trackbacks - 0

忙和了很久,学到很多东西,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>


下面是截图:






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

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

exe下载
posted on 2008-01-04 00:43 万连文 阅读(5875) 评论(10)  编辑 收藏 引用 所属分类: 小作品

FeedBack:
# re: 界面库纳入新的窗口风格(Vista)
2008-01-04 08:02 | <a href=http://minidx.com>minidxer</a>
很漂亮  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-01-04 08:11 | seoul
看了你新的作品, 觉得非常不错, 其实一直关注你的界面开发, 觉得你应该把这些东西整理好, 形成一个开发库,以供大家共享(付费也是不错的方式), 如果能够形成跨平台的, 那是更好了, 成熟的商业库如QT等, 都是不错的方向. 商业钱景也是不错的.  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-01-04 09:31 | <a href=http://minidx.com>minidxer</a>
纯粹的界面开发包商业化很难的
包括QT在内的“钱景”并不乐观  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-01-04 10:08 | tip
以前也考虑过,这个顶层窗口应该是跟背景窗口分离的吧,实现起来还是有点难度  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-01-04 10:59 | 万连文
其实一直在学习,整理中。所以进度很慢,为了保证东西的完美以及解决方案的完备性,商业化考虑很少,只是追求技术上的优美以及内在的积累。有时候真的很羡慕美国的程序员,为了兴趣写程序。其实前景还是钱景,谈论没有意义,存在的就是合理的。对于跨平台,我是厌倦了,linux天生就做服务器挺好的,那个世界的人追求的是键盘的快感。


其实做出这样效果的窗口不难,关键是之后的界面元素的实现机制。  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-01-04 13:46 | 安帛伟
效果挺棒的,可惜没有源码 :P  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-01-06 21:04 | 小笨象
http://www.9ele.com/bbs/a/a.asp?B=400&ID=39
看看。也许大家会有点体会。  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-01-06 22:12 | 万连文
看了这种方法,不过是自己去模拟ms的UpdateLayerWindow,这种做法,边上的毛刺消除不了。  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-04-25 13:53 | 群挑王
谢谢博主,我刚开始学做界面,受益匪浅哈  回复  更多评论
  
# re: 界面库纳入新的窗口风格(Vista)
2008-09-10 09:51 | Daniel King
用了UpdateLayerWindow后窗口里的控件用不了了,连自绘都没法用了
好像是不响应WM_PAINT
如果是个按钮还能解决,如果是文本框不就麻烦了?

请问博主如何处理的?  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


简历下载
联系我

<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(66)

随笔分类

随笔档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜