跟大家分享一下directUI的心得

0. WPF, Windows Live, QQ 和 百度 hi 的界面其实并不神秘。大家都想学习而不得其门而入。我也经历了跟大家同样的历程。现在发现了一些门道,跟大家分享一下。

1. 所谓 directUI 其实大部分不是真的用DirectX技术做的。其实他也是用的GDI和GDI+的函数绘制出来的。
2. 那些看起来非常漂亮的界面效果在《Windows 图形编程》这本书里面基本都有描述如何实现。下载:
3. directUI上的按钮,滚动条,等等其他控件都是自己一笔一划画出来的。看起来一笔一画很复杂。说白了就是用各种画线的函数,还有画块的函数综合搭配起来实现我们想要的效果。 GDI+为我们提供了一些效果的函数,比如渐变填充等等。其实我建议大家学习一下photoshop里面的技法。这些技法其实都是我们可以自己用代码实现的算法。
4. directUI上的消息分发也都是需要自己做的。也就不到一百个把。
6. 在directUI的所有控件中,无窗口富文本编辑框比较特殊。他需要使用windowless richedit技术。涉及ITextService和ITextHost接口。
7. 这一点我正在探索。在 windowsless richedit 中实现图像和其他复杂文档对象,也就是在windows live 和 QQ 中贴图这种操作,需要对OLE对象的编辑功能。这就需要CRichEditOleCallback 和 IRichEditOle 接口。在这里有例子
8. WPF,Windows Live, QQ 和 百度hi他们都利用xml来控制控件的位置风格那些。其实他们都是为公司自己做的foundation库,为了考虑复用才这样做的。我们自己做的话可以不用xml。自己按照自己想做的样子写C++代码就行了。

最后,做directUI是一个非常耗时的过程。大家可以以为基础实现自己的directUI。能节约一些时间。
另外付一个我的作品。这就是用我上面所说的技术实现的。现在我正在实现在文字块中显示ole对象。

自绘也要知道从哪里开始做。viksoe的例子非常有用。还有 windowless richedit control的处理也是一个难点。我用了半年时间才完全搞清楚他。

其他的我不知道,WPF绝对是基于DirectX技术,而不是楼主说的Gdi和Gdi+,因为WPF还有3D和动画特性,Gdi是不可能做出来的。WPF的性能分析工具也可以清楚得看到,各部分UI消耗的显存和GPU使用率

个人愚见:photoshop里那些技法是图像处理效果(滤镜)如glow、blur、mirror、gradient、transparent什么的,这些也就是所谓的计算机视觉(CV),如果只是通过自绘来实现换色、换底图什么的倒不需要做得这么复杂。当然如果要做到很炫的界面是可以用到CV的东西的,我觉得开源的项目OpenCV(C++)和jhlabs(java)还不错,包含了很多这方面的算法。

呵呵,要做到msn, qq2010那种界面是要用一些CV的。其实做得漂亮些也不是很复杂,多用gradient和alphablend之类的函数就行了。gradient可以出磨砂效果,alphablend可以出半透明效果。

GradientFill和AlphaBlend倒是可以用,但是GradientFill只做过渐变效果,不知道LZ是如何做到磨砂效果的?我一般是用一张灰色的图和背景图进行AlphaBlend运算或者直接对背景图进行模糊来达到目的。

这东西本身就不叫 directui
纯自绘确实是实现他的基本方法, 但大多数的实现本身就偏离了这个应用的出发点, 是oleacc的一个分支功能
最平常见到的是浏览器窗口里卖弄的东西, 文字,图片,控件... 这些都是对象,这才是这种所谓的directui的根本, directui只是这个应用的一个分支,专用direct api实现的

就如我在文中所提到的,界面开发不是我日常工作的重点,我学习这个东西主要是为了学习作者好的思想而不是局限于界面设计,看完了我觉得这个框架还是很精妙的,但是感觉作者的意思是验证一种实现方式,如果要实际应用在很多细节上还有待完善,不过在这个基础上开发我相信是可以的。

来源:英超直播

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值