友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第158章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






                  列,数组成员函数(例如Add )的参数是int: 



                      CArray m_intArray; 



                      m_intArray。Add(15); 



                  再举一例,下面程序码表示我们需要一个由int 组成的串行,串行成员函数(例如 



                  AddTail )的参数是int: 



                      CList m_intList; 



                      m_intList。AddTail(36); 



                      m_intList。RemoveAll(); 



                  再举一例,下面程序码表示我们需要一个由CPoint 组成的数组,数组成员函数(例如 



                  Add )的参数是CPoint: 



                      CArray m_pointArray; 



                      CPoint point(18; 64); 



                      m_pointArray。Add(point); 



                   「类型指针」型的template…based classes 使用时亦需指定参数: 



                      ■  CTypedPtrArray 



                      ■  CTypedPtrList 



                      ■  CTypedPtrMap 



                  其中TYPE 用来指定你希望收集的对象的类型,它们可以是: 



                      ■  C++ 基础型别,如int、char、long、float  等等。 



                      ■  C++ 结构或类别。 



                  BASE_CLASS 则用来指定基础类别,它可以是任何用来收集指针的non…template 



                  collection classes ,例如CObList 或CObArray 或CPtrList 或CPtrArray 等等。举个 



                  例子,下面程序码表示我们需要一个衍生自CObList 的类别,用来管理一个串行,而串 



                  列组成份子为CStroke*: 



                      CTypedPtrList m_strokeList; 



                      CStroke* pStrokeItem = new CStroke(20); 



                      m_strokeList。AddTail(pStrokeItem); 



472 


…………………………………………………………Page 535……………………………………………………………

                                                      第8章    Document…View  深入探討 



CScribbleDoc 的修改 



       了解了Collection Classes  中各类别的特性以及所谓template/nontemplate 版本之后,以 



       本例之情况而言,很显然: 



         ■不定量的线条数可以利用串行(             linked list )来表示,那么MFC  的CObList 恰 



           可用来表现这样的串行。CObList 规定其每个元素必须是一个「CObject 衍生 



           类别」的对象实体,好啊,没问题,我们就设计一个名为CStroke 的类别, 



           衍生自CObject,代表一条线条。为了type…safe ,我们选择template 版本, 



           所以设计出这样的Document : 



           class CScribbleDoc : public CDocument 



           { 



           。。。 



           public: 



                 CTypedPtrList m_strokeList; 



           。。。 



           } 



         ■线条由笔宽和坐标点构成,所以CStroke 应该有m_nPenWidth 成员变量,但 



           一长串的坐标点以什么来管理好呢?数组是个不错的选择,至于数组内要放什 



           么类型的资料,我们不妨先着一鞭,想想这些坐标是怎么获得的。这些坐标显 



           然是在鼠标左键按下时进入程序之中,也就是利用OnLButtonDown 函数的参 



           数CPoint。CPoint 符合前一节所说的数组元素类型条件,所以CStroke 的成 



           员变量可以这么设计: 



           protected: 

                   UINT m_nPenWidth; 

           public: 

                   CArray  m_pointArray; 

           。。。 

           } 



           至于CPoint 实际内容是什么,就甭管了吧。 



           事实上CPoint 是一个由两个long 组成的结构,两个long 各代表x 和y 坐标。 



                                                                                     473 


…………………………………………………………Page 536……………………………………………………………

                   第篇    深入  MFC  程式設計 



                    CScribble Step1 Document: (本图为了说明方便,以CObList 代替实际使用之CTypedPtrList) 



                                                这是一个CObList      对象 

                    CObList::RemoveHead                    CObList  的每个元素都是一个CObject          指针。 

                    把串行头之CObject 对象指针取出                    我们令它指向CStroke       对象,合法,因为 



                                                           CStroke  衍生自CObject    。 

                         CScribbleDoc 



                      CObList  m_strokeList                                  CObList::AddTail 

                       CObList  m_strokeList 

                     (文件内含一个CObList   串行)                                    把一个CObject   对象指针 



                                                                             放入串行尾端。 



                                                                           这是一个CArray  对象 

                        UINT m_nPenWidth                                  (线条可以「CPoint       数组」表示) 

                         (代表笔的宽度)                                         (屏幕点坐标正是一个CPoint          ) 



                      CArray::Add 

                      把一个元素放入数组中。 

                                                                          CArray  的' '   

                                       这就是一个                                         运算子 

                                                                          可取出数组的元素。 

                                       CStroke   

                                               对象 



                      图8…3a Scribble Step1 的文件由线条构成,线条又由点数组构成 



                                                   CObject 

                                                    CObject 



                       CCmdTarget                CTypedPtrList 

                        CCmdTarget                CTypedPtrList 



                            CDocument                 CArray 

                             CDocument                 CArray 



                     
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!