嵌入式UI架构设计漫谈

本文探讨了嵌入式设备UI设计的重点,强调简单易用和可重用性。作者指出,界面更换和功能增删应方便快捷。通过类封装和外部存储图片的方式,实现了界面更换无需重新编译,减少了内存占用和程序体积。同时,通过使用语言资源类,简化了多语言支持的实现,避免了大量的switch语句。文章还介绍了如何通过统一的窗口类和CCommand类实现界面和功能的分离,提高代码复用性和组织性。
摘要由CSDN通过智能技术生成
               

//========================================================================
//TITLE:
//    嵌入式UI架构设计漫谈
//AUTHOR:
//    norains
//DATE:
//    Friday 31-October-2008
//Environment:
//    NONE
//========================================================================

    和桌面清一色的采用explorer不同,嵌入式设备更多的采用是自定义的简单UI,即使是含有explorer的wince也是如此。因为对于嵌入式设备而言,功能强大并不是主打,简单易用才是根本。以目前国内的手持车载设备为例,大部分的公司卖的都是硬件,利润很大一部分取决于硬件成本的多寡。并且,每个系列的产品都会有不同的外围器件,而这也决定了无法所有的产品都用同一个UI程序。
   
    虽然UI程序无法使用同一个,但从总体上而言,基本上是相同的;最有可能不同的地方无非是界面多了某些按钮,调用某些功能而已。另一方面,UI程序往往也需要配合产品的外观,风格尽可能和外观相符合。
   
    于是由此,基于可重用性考虑,嵌入式设备的UI基本上必须具有如下特点:
    1.界面更换方便
    2.功能增删方便
 
    下面我们就这两点具体到代码的层次去说说相应的设计。
   
    界面更换方便,这个方便不仅是对于程序编写者而言,也是针对图片设计者。如果是方案提供商,则后者显得更为重要。如果程序能够做到每次更换图片不需要重新编译,那么对于客户而言,他们只需要重新设计图片,然后替换就能立马看到效果。这点是非常重要的,如果每更换一次图片就必须要重编译,意味着多一个客户就会多一个烦恼。
   
    以读取BMP图片为例,最简单的方法就是将bmp图片导入到IDE环境的resource中,在使用的时候调用MAKEINTRESOURCE宏来获取相应的字符串地址即可。不过这会有一个非常严重的问题,因为图片是全部包含于可执行文件中,如果图片很多容量很大,那么单一的可执行文件的大小就会非常可观了。何况在wince中还会有个问题,如果程序体积大于8M,那么读取程序内部包含的图片将有可能会导致失败。
   
    鉴于以上原因,图片放在外部读取是最佳的选择。
   
    如果图片放在外部存储器,读取的速度将是一个不能忽略的问题。假使一张bmp图片的大小为800*480,然后再加上界面上的ICON,如果每次显示时都会分配缓冲然后绘制图片,那么会感觉到有延迟。一般像这种情况之下,我们都会选择一次读取,多次使用的方式。也就是说,只有第一次使用的使用才会将图片保存到缓冲区,以后都只是从这缓冲区获取图片数据而已。
   
    为了能够最大限度节省内存,以及使用的便利性,我们将对图片的读取和获取采用类封装的形式。最为简便的方式是,我们传入一个图片的序号,然后获取一个可供绘制的HDC。
   
    基本的形式概括如下;
    namespace ImageTab
    {
     enum ImageIndex
     {
      NONE,
      BKG_WND_MAIN,
      
      ...
      
      }
      
     struct ImageInfo
     {
      HDC hdc;
      SIZE size;
     }; 
    }

    class CImageTabBase
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值