跟大家分享一下directUI的心得。
说白了,就是自绘
感谢分享感想
感谢分享感想
昵称: jameshooo 时间: 2010-08-05 11:19:47
菜鸟学习中,不懂
昵称: woailp___2005 时间: 2010-08-05 11:20:09
自绘也要知道从哪里开始做。viksoe的例子非常有用。还有 windowless richedit control的处理也是一个难点。我用了半年时间才完全搞清楚他。
昵称: hawkgao 时间: 2010-08-05 11:27:06
我也在研究DirectX
昵称: wutaihua 时间: 2010-08-05 11:38:06
正在学习自绘,不过做出来的东西都是不理想的。。。唉
昵称: xjlzyi 时间: 2010-08-05 11:46:04
谢谢分享!!!!
昵称: wang_zheguilai 时间: 2010-08-05 11:53:27
感谢分享。
特别感谢分享5和6的技术资料。
特别感谢分享5和6的技术资料。
昵称: songsu 时间: 2010-08-05 11:55:59
学学photoshop里面的技法。把那些技法用代码实现就行了。
昵称: hawkgao 时间: 2010-08-05 12:35:37
其他的我不知道,WPF绝对是基于DirectX技术,而不是楼主说的Gdi和Gdi+,因为WPF还有3D和动画特性,Gdi是不可能做出来的。WPF的性能分析工具也可以清楚得看到,各部分UI消耗的显存和GPU使用率
昵称: jackson35296 时间: 2010-08-05 13:00:42
不好意思,我的话说得有点满。WPF当然是directX做的。其他的库是GDI/GDI+和DirectX都有。
昵称: hawkgao 时间: 2010-08-05 13:08:24
个人愚见:photoshop里那些技法是图像处理效果(滤镜)如glow、blur、mirror、gradient、transparent什么的,这些也就是所谓的计算机视觉(CV),如果只是通过自绘来实现换色、换底图什么的倒不需要做得这么复杂。当然如果要做到很炫的界面是可以用到CV的东西的,我觉得开源的项目OpenCV(C++)和jhlabs(java)还不错,包含了很多这方面的算法。
昵称: alien75 时间: 2010-08-05 14:23:05
呵呵,要做到msn, qq2010那种界面是要用一些CV的。其实做得漂亮些也不是很复杂,多用gradient和alphablend之类的函数就行了。gradient可以出磨砂效果,alphablend可以出半透明效果。
昵称: hawkgao 时间: 2010-08-05 14:36:54
谢谢分享!!!!
昵称: iamsky1981 时间: 2010-08-05 14:51:23
GradientFill和AlphaBlend倒是可以用,但是GradientFill只做过渐变效果,不知道LZ是如何做到磨砂效果的?我一般是用一张灰色的图和背景图进行AlphaBlend运算或者直接对背景图进行模糊来达到目的。
昵称: alien75 时间: 2010-08-06 12:02:15
我也用GradientFill。两头色差比较小。看起来差不多像磨砂的。呵呵,可以问问用photoshop的那帮人怎么做磨砂效果。
昵称: hawkgao 时间: 2010-08-06 13:38:03
38.107.179.220 CCBot/1.0 (+http://www.commoncrawl.org/bot.html)

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