随笔-341  评论-2670  文章-0  trackbacks-0
    GacUI今天完成了可自定义格式的ComboBox。ComboBox分为两种,一种是空空如也全部要自己做的只提供下拉功能的GuiComboBoxBase,另一种是在构造函数接受一个GuiSelectableListControl从而自动将列表与ComboBox关联起来的GuiComboBoxListControl。因为列表控件是MVC和virtual mode的混合体,所以如果要自动把列表的文本显示到ComboBox上面去的话,那么加进去的基类为GuiSelectableListControl(预定义的所有列表控件的基类都是这个,包括TreeView)所提供的ItemProvider必须实现一个GuiListControl::IItemPrimaryTextView的View。当然,没有这个View也可以,因为ComboBox同时也可以让你自定义“选中列表”的显示方法——不一定非的是一个字符串,也可以是图片啊色块什么的。

    最新的代码可以在Vczh Library++3.0(Candidate\GUI\GuiDemo\GuiDemo.sln)中找到,运行结果如图所示:



    这个ComboBox之所以直接跟GuiListControl结合起来,还是归功于GuiListControl的MVC和virtual mode混合功能的设计。GuiListControl可以自定义数据源、数据显示样式、数据排列算法以及坐标轴的。其中数据源运行时可修改但是不可直接替换对象。每一种数据显示样式都可以要求数据源提供某种固定格式的View。譬如list::TextItemStyleProvider就要求数据源提供list::TextItemStyleProvider::ITextItemView,ListView的六种样式共享list::ListViewItemStyleProvider::IListViewItemView。如果你需要设计新的view,或者为已知的数据源提供view,可以简单的继承那个数据源类并override它的RequestView和ReleaseView方法。这样View就成为了数据源和数据显示样式中间的一个媒介。不同的数据显示样式可以共享View,不同的数据源也可以提供相通的View,这样他们之间的耦合就解除了。用户可以根据各自的性能要求来实现View。

    举个例子,你直接从文件读出来的一个巨大的struct数组,要求你转换成一个一个的object显然是太浪费性能了。在这种情况下,你只需要实现一个GuiListControl::IItemProvider并提供具体的View的实现,就可以让列表控件仅仅在需要显示数据的时候,才使用index来向View获取具体的数据内容。这可以大大提高性能,而且甚至可以在可能的情况下实现“一边拖滚动条,一边异步加载数据”这样的高级操作。

    更多的ComboBox样式会在接下来提供到Demo里面去,可能会有ColorPicker或者FontPicker等等,如果时间充足的话。
posted on 2012-01-04 06:24 陈梓瀚(vczh) 阅读(2540) 评论(8)  编辑 收藏 引用 所属分类: GacUI

评论:
# re: GacUI完成可自定义格式的ComboBox 2012-01-04 17:23 | 空明流转
师祖威武!  回复  更多评论
  
# re: GacUI完成可自定义格式的ComboBox 2012-01-07 00:58 | 求教
我忘记您的csdn的BLOG的地址了,能告诉下么,我记得上面有篇文章对俺挺有用,谢谢。  回复  更多评论
  
# re: GacUI完成可自定义格式的ComboBox 2012-01-07 01:15 | 陈梓瀚(vczh)
@求教
我自己也忘了……那篇文章是什么名字……  回复  更多评论
  
# re: GacUI完成可自定义格式的ComboBox 2012-01-07 09:53 | 求教
@陈梓瀚(vczh)
关键问题不就是因为记不得了么,要不然早就GOOGLE出来了。
  回复  更多评论
  
# re: GacUI完成可自定义格式的ComboBox 2012-01-08 18:59 | 装配脑袋
快写文档啊~~  回复  更多评论
  
# re: GacUI完成可自定义格式的ComboBox 2012-01-08 19:49 | 陈梓瀚(vczh)
@装配脑袋
等我反射做完,我就用xml来阻止文档然后生成成html……  回复  更多评论
  
# re: GacUI完成可自定义格式的ComboBox 2012-01-11 19:31 | 装配脑袋
@陈梓瀚(vczh)
需要写你那些Layout啥的概念……  回复  更多评论
  
# re: GacUI完成可自定义格式的ComboBox 2012-01-11 19:49 | 陈梓瀚(vczh)
@装配脑袋
会有的……  回复  更多评论
  

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