5、文档视图框架1.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5、文档视图框架1

基本内容 文档/视图框架 序列化 CFile 不适用的情况 CDocument 有一个成员变量 CDocTemplate* m_pDocTemplate,用于回指其Document Template;另有一个成员变量 CPtrList m_viewList,表示它可以同时维护一系列的 Views。 CFrameWnd有一个成员变量CView* m_pViewActive ,指向目前正作用中的View。 亦可用CFrameWnd::GetActiveView()获得视图对象指针 CFrameWnd::GetActiveDocument()获得当前活动的文档对象指针。 CView有一个成员变量 CDocument* m_pDocument,指向相关的文档 Document。 CWnd::GetParentFrame可实现从视图类中获取主框架指针。 文档视图相互作用的典型实例 切分窗口 静态切分:窗口第一次被创建时,窗格就已经被切分好了。最大窗格数目为16×16。 动态切分:允许用户在任何时候对窗口进行切分。最大窗格数目为2×2。 举例:Graph 一档多视 举例:Rect (1)切分窗口类 BOOL Create( CWnd* pParentWnd, int nMaxRows, int nMaxCols, SIZE sizeMin, CCreateContext* pContext, DWORD dwStyle = WS_CHILD | WS_VISIBLE |WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT, UINT nID = AFX_IDW_PANE_FIRST ); BOOL CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST ); (2)一档多视 MFC对于“一档多视”提供下列三个模式: 1)在各自MDI文档窗口中包含同一个视图类的多个视图对象。 2)在同一个文档窗口中包含同一个视图类的多个视图对象(即切分窗口运用于SDI) 3)在单独一个文档窗口中包含不同视图类的多个视图对象。(例如,同一个文档可同时有文字显示方式及图形显示方式的视图)。 CArchive类定义了一个代表磁盘文件的CFile类型的指针对象并封装了对文件的打开及关闭等操作方法,同时重载了插入符“”和提取符“”,从而使得CArchive类的对象相当于一个特殊的I/O对象,在实际应用中也可以把它看作是磁盘文件的缓冲。 CArchive(归档)类提供对文件数据进行缓存,它同时还保存一个内部标记,用来识别文档是存入还是载入。每次只能有一个活动的存档与ar关联。 CArchive类还提供了成员函数: Bool ReadString(CString rString); LPTSTR ReadString(LPTSTR lpsz, UINT nMax); Void WriteString(LPCTSTR lpsz) 注意:当向一个文件写一行字符串时,字符’\0’和’\n’都不会写入文件中,在使用时要特别注意。 DeleteContent: 在document类中加入DeleteContent虚函数,它会在用户点击“打开”和“新建”菜单时自动调用,这是删除文档数据的最好时机。删除时有两种常见的错误:  1.错误方法一: for (int i=0;im_lnArray.GetSize();i++) delete (Cline*)m_lnArray.GetAt(i); m_lnArray.RemoveAll(); 原因:每循环一次,m_lnArray.GetSize()返回的值都会减小,造成数据的漏删。 2.错误方法二:  int index=lnArray.GetSize(); for (int i=0;iindex;i++) { delete (Cline*)m_graphArray.GetAt(i); m_lnArray.RemoveAt(i); } 原因:每删除一个数组元素,数组都会重新排序,它的下标会变。 3.正确方法: int index=m_lnArray.GetSize(); while(index--) delete (Cline*)m_lnArray.GetAt(index); m_lnArray.RemoveAll(); Char *pFileName=“test.dat”; CFile myFile; CFileException fileException; if(m

文档评论(0)

haowendangqw + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档