C++ & Embed

C++博客 首页 新随笔 联系 聚合 管理
  6 Posts :: 1 Stories :: 17 Comments :: 0 Trackbacks
近年的样机开发正接近尾声。现在回头看看回顾界面库开发走过的历程,觉得走了不少弯路,积累了不少经验。
昨天查找了一些界面库的资料,忽然有种豁然开朗的感觉。关键字是“DirectUIHWND”。

众所周知,在Windows界面开发中,使用VC中一般的控件很难达成好的界面效果。同时,控件的功能和效率都很难令人满意。

在今年的开发中,决定在Wince上实现一个符合MVC的应用框架。其中View层搭建在MFC框架之上。所有的“窗体”、“控件”都从CWnd继承,
拥有自己的消息循环和DC。
这个设计的主要问题是:
1.内存占用。
2.运行时效率。
3.无法有效的进行双缓绘图。
4.各控件的GDI对象相关操作过于频繁造成内存碎片。

经过多次改进,当前的设计方式已经改为:
1.只有一个实际窗体。保持全局DC和相关的一些GDI对象。统一管理、操作。
2.各逻辑窗体、控件不继承自CWnd。刷新等操作完全由实际窗体进行。
3.实际窗体与逻辑窗体配合,实现各逻辑窗体的消息响应机制。

这种设计方法,正好与DirectUIHWND的基本设计思想暗合。

下面是DirectUIHWND相关的一些信息:
“DirectUIHWND”,意为Paint on parent dc directly。 即子窗口不以窗口句柄的形式创建,只是逻辑上的窗口,绘制在父窗口之上。这种方式最大的好处在于可以很方便的构建高效,绚丽的界面。国外如微软,国内如腾讯,百度等公司的客户端产品多采用这种方式来界面,从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。DirectUI界面库旨在满足客户端界面快速开发的需要,同时融入业界领先的皮肤技术,为用户创建更加高效,专业的界面。

绕了这么大一圈,结果竟是殊途同归。当发现这些信息的时候,界面库已经基本修改完毕。
posted on 2009-12-19 17:43 眩晕:C++ & Embed 阅读(6100) 评论(4)  编辑 收藏 引用 所属分类: Embed/Wince

评论

# 这种设计并不好。 2011-01-27 21:45 阿强
本来用VC就可以做很好的界面了,每个控件都提供了自绘的方法。只不过并不是所有人都掌握而已。如果每个控件都自己做,说白了,吃饱了撑的。所有的控件,都画到主窗口上,然后自己管理,你觉得你能做的比微软好?说白了,这种设计,只能自己用,出问题自己随时改,如果给别人用,别人还得学习。  回复  更多评论
  

# re: DirectUIHWND:Windows界面编程的终点? 2011-01-28 08:32 KGEN
嵌入式图形库,并且配合MVC框架,需要搭建在WINCE上。很遗憾市面上没有通用的。
复杂的手持设备上各厂商大多有自己的图形库,而且都不开放。
我们公司的这个库没花多少钱就开发出来了,而且能用在销售额过千万的设备和数百万的软件系统上。大家都觉得很值得呢……
  回复  更多评论
  

# re: DirectUIHWND:Windows界面编程的终点? 2011-05-10 10:34 liuccer
@阿强
不要乱叫,没有确切的去实施,你就不能理解其中的奥秘,现在UI为了达到华丽的效果,往往会使用alpha,VC的自绘机制实现alpha效果是非常蹩脚的。如果自己去实现一个高效华丽的UI,你会发现,最终你会慢慢趋向于DirectUIHWND;-)  回复  更多评论
  

# re: DirectUIHWND:Windows界面编程的终点? 2016-07-19 14:43 阿强
你直接画到父窗口上,还不是用的VC的父窗口的自绘?你的alpha不用vc?  回复  更多评论
  


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