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

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

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






                Message Map 的一部份,ClassWizard 可以很方便地帮助我们完成相关的Message Map 设 



                定工作。 



                首先,选按【View/ClassWizard 】激活ClassWizard,选择其【Message Map 】附页: 



               在图右上侧的【Class Name 】清单中选择CScribbleView,然后在图左侧的【Object IDs 】 



               清单中选择CScribbleView,再在图右侧的【Messages 】清单中选择WM_LBUTTONDOWN , 



               然后选按图右的【Add Function 】钮,于是图下侧的【Member functions 】清单中出现一 



               笔新项目。 



               然后,选按【Edit Code 】钮,文字编辑器会跳出来,你获得了一个OnLButtonDown 函数 



               空壳,请在这里键入你的程序代码: 



496 


…………………………………………………………Page 559……………………………………………………………

                                                   第8章    Document…View  深入探討 



另两个消息处理例程的实作作法雷同。 



Message Map 因此有什么变化呢?ClassWizard 为我们自动加上了三笔映射项目: 



BEGIN_MESSAGE_MAP(CScribbleView; CView) 

        //{{AFX_MSG_MAP(CScribbleView) 

        ON_WM_LBUTTONDOWN() 

        ON_WM_LBUTTONUP() 

        ON_WM_MOUSEMOVE() 

        //}}AFX_MSG_MAP 

        // Standard printing mands 

        ON_MAND(ID_FILE_PRINT; CView::OnFilePrint) 

        ON_MAND(ID_FILE_PRINT_DIRECT; CView::OnFilePrint) 

        ON_MAND(ID_FILE_PRINT_PREVIEW; CView::OnFilePrintPreview) 

END_MESSAGE_MAP() 



此外ScribbleView 的类别声明中也自动有了三个成员函数的声明: 



class CScribbleView : public CView 

 { 

 。。。 

// Generated message map functions 

protected: 

        //{{AFX_MSG(CScribbleView) 

        afx_msg void OnLButtonDown(UINT nFlags; CPoint point); 

        afx_msg void OnLButtonUp(UINT nFlags; CPoint point); 

        afx_msg void OnMouseMove(UINT nFlags; CPoint point); 

        //}}AFX_MSG 

 。。。 

 }; 



                                                                                    497 


…………………………………………………………Page 560……………………………………………………………

               第篇    深入  MFC  程式設計 



            WizardBar 的辅佐 



                WizardBar 是Visual C++ 4。0 之后的新增工具,也就是文字编辑器上方那个有着【Object 



                IDs 】和【Messages 】清单的横杆。关于修改Message Map 这件事,WizardBar 可以取代 



                ClassWizard 这个大家伙。 



                首先,进入ScribbleViwe。cpp  (因为我们确定要在这里加入三个鼠标消息处理例程),选 



                择WizardBar 上的【Object IDs  】为CScribbleView , 再选择【Messages  】为 

                  _ 

                WM LBUTTONDOWN ,出现以下画面: 



                回答Yes ,于是你获得一个OnLButtonDown 函数空壳,一如在ClassWizard  中所得。请 



                在函数空壳中输入你的程序代码。 



            Serialize :对象的文件读写 



                你可能对Serialization 这个名词感觉陌生,事实上它就是对象导向世界里的Persistence         (永 



                续生存),只是后者比较抽象一些。对象必须能够永续生存,也就是它们必须能够在程 



                式结束时储存到文件中,并且在程序重新激活时再恢复回来。储存和恢复对象的过程在 



                MFC 之中就称为serialization。负责这件重要任务的,是MFC CObject 类别中一个名为 



                Serialize  的虚拟函数,文件的「读」「写」动作均透过它。 



498 


…………………………………………………………Page 561……………………………………………………………

                                                       第8章    Document…View  深入探討 



      如果文件内容是借着层层类别向下管理(一如本例),那么只要每一层把自己份内的工 



      作做好,层层交待下来就可以完成整份资料的文件动作。 



Serialization 以外的文件读写动作 



      其实有时候我们希望在重重包装之中返璞归真一下,感受一些质朴的动作。在介绍 



      Serialization 的重重包装之前,这里给你一览文件实际读写动作的机会。 



      文件I/O 服务是任何操作系统的主要服务。Win32 提供了许多文件相关APIs :开档、 



      关文件、读文件、写文件、搜寻资料。。。。MFC 把这些操作都包装在CFile 之中。可想而知,它 



      必然有Open、Close、Read 、Write、Seek 。。。 等等成员函数。下面这段程序代码示范CFile 如 



      何读档: 



       char* pBuffer = new char'0x8000'; 

       CFile file(〃mydoc。doc〃; CFile::modeRead);  //  

                                                     打开mydoc。doc 文件,使用只读模式。 

       UINT nBytesRead = file。Read(pBuffer; 0x8000); // 读取8000h 个字节到pBuffer 中。 



       上述程序片段中,对象file   的构造式将打开mydoc。doc 档。并且由于此对象产生于函数 



       的堆栈之中,当函数结束,file   的析构式将自动关闭mydoc。doc 档。 



       开文件模式有许多种,都定义在CFile             (AFX。H )之中: 



       enum OpenFlags { 

             modeRead =    0x0000;  //只读 

             modeWrite =         0x0001;  // 唯写 

             modeReadWrite =0x0002;  // 可读可写 

             sharepat =      0x0000; 



            shareExclusive =    0x0010; // 唯我使用 

             shareDenyWrite =    0x0020; 

             shareDenyRead =0x0030; 

             shareDenyNone =0x0040; 

             modeNoInherit =0x0080; 

             modeCreate =        0x1000;  //产生新档(甚至即使已有相同名称之文件存在) 

             modeNoTruncate =   0x2000; 

             typeText =    0x4000; // typeText and typeBinary are used in 

             typeBinary =       (int)0x8000 // derived classes only 

             }; 

                   typeText = 0x4000; // typeText and typeBinary are used in 



                   typeBinary = (int)0x8000 // derived classes only 



                   }; 



                                                                                       499 


…………………………………………………………Page 562……………………………………………………………

                    第篇    深入  MFC  程式設計 



                    再举一例,下面这段程序代码可将文件mydoc。doc  的所有文字转换为小写: 



                        char* pBuffer = new char'0x1000'; 

                        CFile file(〃mydoc。doc〃; CFile::modeReadWrite); 

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