让UI开发轻松而快乐,用SonicUI引擎实现常见UI效果
2009-01-17 19:39:14 来源:WEB开发网除了委托绘制以外,你还可以向画布上直接添加UI对象,画布支持的对象有:ISonicImage, ISonicString, ISonicPaint
5.异形窗体(包括像素级透明异形窗体)
异形窗体也是UI特效中经常需要使用的技术,常见的有两种实现方法。一种方法是根据图片裁剪出一个rgn,然后调用SetWindowRgn,另一个方法是将窗体设为WS_EX_LAYERED属性,调用SetLayeredWindowAttributes或UpdateLayeredWindow实现透明裁剪。前一种方法效率较低,而且拖动窗体时会出现难看的残影,后一种方法表现效果更好,拖动时可以避免残影出现,但不能作用于WS_CHILD属性的窗体。二者各有优劣。SonicUI同时提供了这两种实现方法,可以根据情况选择。
方法1:...
方法2:
// ISonicImage * pImg
SetWindowRgn(hWnd, pImg->CreateRgn());...
// ISonicImage * pImg
// ISonicWndEffect * pEffect
pEffect->Attach(hWnd, TRUE); // 使用像素级alpha模式attach
pEffect->SetShapeByImage(pImg);
图二:异形窗体效果图
值得一提的是,如果使用UpdateLayeredWindow做窗体的像素级alpha特效,文字输出就成为了一个麻烦,因为gdi的文字输出函数是不带alpha通道的,直接TextOut上去无法正常表现。不过ISonicString可以帮你解决这一难题,我在内部已经为文字增加了alpha通道,可以很好的适应背景。
结束语:引擎中还有滚动字幕组件,动画组件等常用的UI表现组件,限于篇幅就不一一介绍了,请大家参照ISonicUI.h中的说明自己试用。设计这个引擎时的基本原则就是轻便,高效,如果大家在使用过程中有什么好的建议或需求,也敬请联系我,帮助我完善这个引擎。因为引擎完整实现代码有数万行,而且现在还属于公司财产,就暂不公布完整源码了,但对某些技术实现细节有兴趣的朋友,可以与我联系,共同学习进步。
更多精彩
赞助商链接