提升界面库效率----WINCEUI库的文章

原文地址::http://www.wceui.cn/wceui_accelerate_ui.html

 

 

 

在工作中经常会有人问到,如何提高界面的效率,在本文中我做一个比较全面的总结,如果有不妥的地方,请到我们的blog上留言或者发邮件告诉我们.
 
1.硬件平台
     不同的硬件平台,跑Windows CE的速度是不一样的,有的平台支持2D加速,而有的平台却不支持,有的平台CPU高些,而有的平台CPU会差一点,并非CPU高就跑界面一定快,因为如果平台有2D加速的话,就算CPU频率低一点,也许界面还会更快些.
     对于一个做应用软件的工程师来说,硬件平台常常是确定的,不可更改的,而工程师要做的事情就是,如何去优化软件.
 
2.基于窗口的软件
    基于Win32的窗口的软件应该是兼容性最好的了,因为窗口是微软的根本,也许很多学习Windows编程的同胞们都是从窗口的消息循环开始吧.
 
    2.1基于win32的控件
    基于Win32的控件应该是最常用的win32的写程序的方式,类库则有MFC支持,虽然关于MFC在网上有很多非议,但MFC的使用用户相当的大.对于Wince的工程师而言,如果用户对界面要求比较高,比如说您常常需要自绘list box, edit box, static, 最终您将会非常痛苦,因为,如果处理滚动条是个问题.假如说用户需要一些动画效果的话,您又得为此做很多处理.
    建议做Win32控件的同胞们研究一下GetDCEx这个API,也许,您将会有新的收获.
 
    2.2基于DirectUI
    DirectUI就是只有一个窗口,所有的控件都是自己实现,如果您用spy++去看MSN或者Tencent的一些界面,您会发现他们只用了一个窗口,里面的控件却很丰富多彩,这就是DirectUI.
   回到Windows CE上来,在Windows CE上使用DirectUI可以大大的改善界面的效率,当然,他带来更多的问题,如果没有好的架构,您要组织好每一个控件也是一个问题.
   使用DirectUI还有一个问题就是,别人也许只对win32的控件比较熟悉,您做怎么样的封装给用户用,让他用起来很容易.之所以要封装,是因为不可能每个工程师都要去自己实现一套DirectUI,这太耗费力气.
   使用DirectUI还有一个问题是如何实现一个Edit,Edit包括单行(带密码,或者不带密码),多行.以及Edit涉及到的滚动条的问题.

   然而,使用DirectUI的优势是明显的,您可以用您的全部智慧去处理您所需要的东西,去优化她.另DirectUI在实现一些特殊效果上很容易,比如说透明,动画,当您的界面已经无法优化了,如果还不是DirectUI,您可以考虑一下.
 
3.RGB 565格式的位图
   如果您不太了解RGB(565)格式的位图,那您一定要了解一下,RGB(565)表示一个颜色用16bit表示,也就是用两个BYTE表示,红占5bit,绿占6bit,蓝占5bit.目前我见过的机器,99%都是这种显示模式的,我只见过一台Windows CE机器是RGB(888)模式的.
   在程序的位图资源中,您一定要使用RGB(565)格式的位图,这样可以最大化效率.用32/24bit的bitmap和用16bit的位图效率差距巨大.
 
4.双缓冲避免屏幕闪烁
   双缓冲的概念想大家应该很熟悉了,我想说的是,如果是基于win32控件的界面,就算您使用了双缓冲,也未必可以避免屏幕闪烁的问题,因为这些控件可能不是同时输出到屏幕上的,如果您的控件非常多的话,您会看到一个很明显的闪烁过程,一些控件先输出到屏幕上,另一些还没有输出.如果您执着于解决这个问题,请您研究一下GetDCEx这个API
   双缓冲配合DirectUI在一起使用,就不会出现屏幕的闪烁问题.
 
5.WM_ERASEBKGND/WM_PAINT
   OnEraseBkgnd一定要返回TRUE,全部都在WM_PAINT消息中画. 这样只有一个地方画,逻辑更好处理,效率更高.
 
总结:
   采用DirectUI,565格式的位图,双缓冲有助于界面效率的提高.
   WceUi界面库采用DirectUI,565位图,双缓冲,并对控件做了一个非常好的封装,完全支持Edi.WceUi界面库在效率上已经基本达到了极限。
http://www.wceui.cn/wceui_accelerate_ui.html

 

 

//=====================================

备注::

 1>今天再读到这篇文章,心中只有会心的微笑。因为这些内容正是自己最近亲身经历过的,早把这篇文章读懂前段时间就不会弄UI程序弄的那么痛苦啊!

看来转载的东西也不能算是自己的东西啊!必须自己亲自经历的才能真正懂啊!  2012--10--14

2>今天用565 BMP+ALPHA 文件的方式,ALPHA一张800*480图片的时间为22MS左右,难道已经达到了WINCEUI的水准?!



 

你可能感兴趣的:(提升界面库效率----WINCEUI库的文章)