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

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

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






        矩形。我打算用以下类别,组织这份文件: 



                        CObject                           CRect 

                        CObject                            CRect 



                               CObList                    CPoint 

                                CObList                    CPoint 



                               CDWordArray 

                                CDWordArray               CSize 

                                                           CSize 



                               CStroke 

                                CStroke 



                               CRectangle 

                                CRectangle 



                               CCircle 



                               CDocument 

                                CDocument 



                                     CMyDoc 

                                      CMyDoc 



        其中CObList 和CDWordArray 是MFC 提供的类别,前者是一个串行,可放置任何从 



        CObject 衍生下来的对象,后者是一个数组,每一个元素都是〃double word〃。另外三个 



        类别:CStroke 和CRectangle 和CCircle,是我从CObject 中衍生下来的类别。 



        class CMyDoc : public CDocument 

        { 

            CObList m_graphList; 

            CSize   m_sizeDoc; 

            。。。 

        }; 

        class CStroke : public CObject 

        { 

            CDWordArray m_ptArray;   // series of connected points 

            。。。 

        }; 

        class CRectangle : public CObject 

        { 

            CRect m_rect; 

            。。。 

        }; 

        class CCircle : public CObject 



                                                                                                161 


…………………………………………………………Page 224……………………………………………………………

                   第篇  勿在浮砂築高台 



                   { 

                       CPoint  m_center; 

                       UINT    m_radius; 

                       。。。 

                   }; 



                   假设现有一份文件,内容如图3…3,如果你是Serialize 机制的设计者,你希望怎么做呢? 



                   把图3…3 写成这样的文件内容好吗: 



                    06 00                         ;CObList elements count 



                    07 00                         ;class name string length 

                    43 53 74 72 6F 6B 65          ;〃CStroke〃 

                    02 00                         ;DWordArray size 

                    28 00 13 00                   ;point 

                    28 00 13 00                   ;point 



                    0A 00                         ;class name string length 

                    43 52 65 63 74 61 6E 67 6C 65 ;〃CRectangle〃 

                    11 00 22 00 33 00 44 00       ;CRect 



                    07 00                         ;class name string length 

                    43 43 69 72 63 6C 65          ;〃CCircle〃 

                    55 00 66 00 77 00             ;CPoint & radius 



                    07 00                         ;class name string length 

                    43 53 74 72 6F 6B 65          ;〃CStroke〃 

                    02 00                         ;DWordArray size 

                    28 00 35 00                   ;point 

                    28 00 35 00                   ;point 



                    0A 00                         ;class name string length 

                    43 52 65 63 74 61 6E 67 6C 65 ;〃CRectangle〃 

                    11 00 22 00 33 00 44 00       ;CRect 



                    07 00                          ;class name string length 

                    43 43 69 72 63 6C 65           ;〃CCircle〃 

                    55 00 66 00 77 00              ;CPoint & radius 



                   还算堪用。但如果考虑到屏幕卷动的问题,以及打印输出的问题,应该在最前端增加「文 



                   件大小」。另外,如果这份文件有100 条线条,50 个圆形,80 个矩形,难不成我们要记 



                   录230 个类别名称?应该有更好的方法才是。 



162 


…………………………………………………………Page 225……………………………………………………………

                                 第3章    MFC 六大關鍵技術之模擬 



      CObList m_graphList 

      CObList m_graphList 



     图3…3 一个串行,  内含三种基本图形: 线条、圆形、矩形。 



我们可以在每次记录对象内容的时候,先写入一个代码,表示此对象之类别是否曾在档 



案中记录过了。如果是新类别,乖乖地记录其类别名称;如果是旧类别,则以代码表示。 



这样可以节省文件大小以及程序用于解析的时间。啊,不要看到文件大小就想到硬盘很 



便宜,桌上的一切都将被带到网上,你得想想网络频宽这回事。 



还有一个问题。文件的「版本」如何控制?旧版程序读取新版文件,新版程序读取旧版 



文件,都可能出状况。为了防弊,最好把版本号码记录上去。最好是每个类别有自己的 



版本号码。 



下面是新的构想,也就是Serialization 的目标: 



                                                           163 


…………………………………………………………Page 226……………………………………………………………

                   第篇  勿在浮砂築高台 



                    20 03 84 03                 ;Document Size 

                    06 00                       ;CObList elements count 



                    FF FF                       ;new class tag 

                    02 00                       ;schema 

                    07 00                       ;class name string length 

                    43 53 74 72 6F 6B 65        ;〃CStroke〃 

                    02 00                       ;DWordArray size 

                    28 00 13 00                 ;point 

                    28 00 13 00                 ;point 



                    FF FF                           ;new class tag 

                    01 00                           ;schema 

                    0A 00                           ;class name string length 

                    43 52 65 63 74 61 6E 67 6C 65   ;〃CRectangle〃 

                    11 00 22 00 33 00 44 00         ;CRect 



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