读书人

怎么设计这样的类

发布时间: 2012-03-17 19:06:28 作者: rapoo

如何设计这样的类
现在想实现界面的图文混排。主要设计3个东西,一个是存储元素属性的类。比如图片元素包含图片大小,帧数以及文件路径等
第二个是管理这些元素的类。比如插入或删除了上面提到的元素,对这些元素的位置进行管理。如果上面元素的类是ItemInfoBase那么这个类应该有个list<ItemInfoBase*>m_ItemInfos的东西来管理对元素的操作。

第三个是负责显示这些元素信息的类并且提供对第二个类的对象插入或删除的操作。如果第二个类是ItemBase那么这个类应该有个list<ItemBase*>m_Items东西来管理对ItemBase元素的操作。

就好比是listBox(listBox由好多个listBoxItem组成, listBoxItem由可能包含图片或文字信息)

现在主要问题是对这些元素要求有两种显示方法,一种是用类似画笔之类的东西直接把这些东西画出来,另一种是用窗口的方式(这个时候每个ItemInfoBase都要比第一种显示方式的元素多一个类型Window* 的这样的一个属性).

如何设计好这些类,感觉第一显示种方式和第二种显示方式中有很多可以重用的代码,又有很多不一样的地方

[解决办法]
晕了。
[解决办法]
你使用窗口就不用绘图了 ?

如果需要绘图,也就是第二种方案多了要画一个窗口而已。其他的都一样啊。
[解决办法]
ListBoxItem增加一个window的属性,或继承某个window,画只是处理方式的不同,可以实现两个画的函数,或类。
[解决办法]
自己做一个控件,可以学习参考CListCtrl
[解决办法]
第二种吧 因为每个item都要自己响应操作的(选中高亮之类)的
[解决办法]
这个问题有难度。。。
Mark
[解决办法]
感觉挺简单的,就是直接画出来的类和用window*的类的绘图函数不同而已:

C/C++ code
class ItemInfoBase{  public:    virtual void Paint() = 0;}class ItemDrawDirect : ItemInfoBase{public:    void Paint()    {     //Draw directly.   }}class ItemDrawWindow : ItemInfoBase{public:    void Paint()    {     //draw window.   }private:   window* _window;}class ItemBase{public:   void Paint()   {      list<ItemInfoBase*>::iterator it_ItemInfoBases;      for ( it_ItemInfoBases=_ItemInfoBases.begin();          it_ItemInfoBases != _ItemInfoBases.end();          ++it_ItemInfoBases )         (*it_ItemInfoBases)->Paint();   }private:  list<ItemInfoBase*> _ItemInfoBases;}
[解决办法]
探讨
DrawDirect和DrawWin是两种绘制方式,打算继承DrawBase

读书人网 >C++

热点推荐