« 漂流 九畹溪(1) | Your Second Watch »

桌面软件之个性化·自绘滚动条

bruce | 八月 02,2005 15:29

盛大的圈圈丢了出来。雷声打了很久,看看钱砸出来的软件是什么个效果。
产品定位上还好,和游戏聊天互通。
服务器端不好评估,自然不是QQ的对手,小马哥唯一的自豪就是对手没有那么大的长期压力测试规模。
那就只有来看看GUI程序上的功底吧。

现在直接面向用户的个人桌面软件产品,典型的就是IM产品,为了追求个性化,提供个性皮肤定制,不得不做很多自绘工作。美工设计出美妙的GUI界面,程序员却要做很多痛苦的贴图拆分,自绘工作。效果自然是达不到原型的效果。原因正是基于窗口的客户端程序:
要么全部自绘和控制元素的交互,如WinAmp Mediaplayer等,这对界面开发人员的要求较高,仿佛一张白纸,所有事情都要自己一点一滴Paint出来。当然,在界面交互元素多的情况下,要实现Tree List等复杂控件,工作量就大咯,蛮少人有机会自己做一整套效果完善的GUI框架。
要么把现有控件拿来继承一下,截获各种绘图消息,自绘一把,这种事情相信不少人做过。这确实是一种省事的方法,利用MFC VCL等结构,自己做做重绘就行。做是可以做,简单的按钮窗口重绘都无所谓,最让美工和程序员莫过于滚动条了,这个NCPaint区域的东西是不少滑动视图窗口的灵魂,也是不少人的恶梦。因为普通做法是做不到他的自绘的,喜欢钻研的人用巧妙的手段解决,非完美主义者也就让那些丑陋的BUG遗弃在那里。
关于滚动条区域自绘的研究,4年前我做过,也有相应的文章和代码。真正愿意做这种事情的人实在是太少。不多,见过几个。

比较了几个软件QQ/泡泡/圈圈,倒是发现泡泡的GUI人员功底深一些,别人看界面看到的是一个整体,我看到的都是零散的组合,任何细节休想逃脱。
这里当然不和msnmsger相提并论,Windows是微软写的,他爱怎么搞怎么搞去,从头写一套GUI结构也是经常的事。有兴趣DirectUI方面参考http://www.codeproject.com/com/cominterfacehookingpart.asp 研究。

附加自绘滚动条窗口对于那些自绘视图很有效,大家都知道。
很巧,大家都知道这种桌面程序用MFC写更加节省资源或者定制性更高(当然skype用delphi除外)。
imguispyall.gif, 14 KB

一般视图窗口如ListView/TreeView等的滚动条自绘是很麻烦的,各种消息不好截获不好重绘,要把握住很复杂,不从底层下手,必然会出bug。
QQ做这个是很早的,也许是bug不好解决,现在主界面上基本没有处理滚动条,就让windows风格去显示吧。但一些遗留问题还存在。

imguiqqbad.gif, 9 KB
imguiqqbad2.gif, 10 KB

盛大的圈圈更是赶工赶出来的,很多低级的错误,虽然整体上把握得不错,但细节确实有些挫。
imguisdobad1.gif, 11 KB
imguisdobad2.gif, 7 KB
藏都藏不好

相比而言,GUI程序上,泡泡的开发人员更加精致一些。
相信他也想了法子:
给每个滚动视图附加一个自己的滚动条控件,不仅仅是遮挡住原始滚动条(因为窗口绘制上无父子关系,原始滚动条不会被挡住),因此把视图的滚动条属性隐藏,截获消息控制滚动条显示,和滚动滚动条控制视图滚动。(其实这里有个好法,不去处显示滚动条的窗口属性,而是把原来相关的NC区域给SetRGN抠去了,就是说原始的滚动视图已经是被挖去滚动区域的不规则窗口,也不会出现原始滚动条覆盖自绘滚动条的BUG,而且还可以横纵兼施)。
imguipopo.gif, 5 KB

这种做法自然会增加相应的窗口句柄。但泡泡在GDI句柄方面控制得不错。
imguimem.gif, 2 KB

当然,一个软件,有其是这种带网络服务的软件的好坏,不能光从界面编程上来评判。但足以评判一个开发人员的精益求精的精神。
界面开发基本成模式,无论是windows还是x-window还是Mac还是嵌入式GUI编程,基本的交互元素和规则,相关消息,都大同小异。要完全掌握他们,就应该从底层实现上整体上驾驭他们,其实说白了很简单,就是视觉游戏,无休止的重绘。

题外话
对于利用众多复杂控件的应用程序来说,就不要在这个上面费功夫了,不伦不类的界面画出来,并不能给业务带来好处,也不会给用户带来亲切感(因为用户用软件仅仅是为了工作,而不是享受),因此使用操作系统标准风格兼容就是又省力又省资源又专业的理智做法。

我顶 [回复]

很喜欢看你的文章
觉得能学到不少东西 ,呵呵

yaiba | 2005-08-05, 20:01

写得不错 [回复]

你很细心。读你的文章就像是上了一课。

pt4235 | 2005-08-09, 16:44

我顶 [回复]

瓦考 你 好强啊  佩服佩服

■■■■ | 2005-08-16, 15:30

圈圈新版本0802即将推出,欢迎试用 [回复]

圈圈的新版本0802即将推出,欢迎你试用。
相信你能看到很多的改进。
另外圈圈的服务器端是进行过长时间压力测试的,我可以告诉你的是,在服务器数量有限的情况下,就已经很好的支持了同时200w在线。

圈圈 | 2005-08-17, 04:33

枪手? [回复]

不是盛大的枪手吧

大牛 | 2005-09-05, 18:25

顶你没商量 [回复]

以前是直接用HtmlDocument
写个Web页最方便——不觉得chm电子书用起来舒服么?开发也简单么?

如今干这活的就叫xml了……

期待vista(longhorn) ing

钢盅郭子 | 2005-09-14, 16:06