第6讲 文档视图结构(SDI)中类之间的访问.ppt

第6讲 文档视图结构(SDI)中类之间的访问.ppt

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

第6讲 文档视图结构(SDI)中类之间的访问 单文档和多文档程序都采用文档/视图结构 单文档界面(SDI)应用程序的基本结构 应用程序类(由CWinApp派生) 封装了初始化、创建窗口、消息循环等功能 可以在虚函数InitInstance( )中添加程序代码 窗口框架类CMainFrame(由CFrameWnd派生) 负责标题栏、菜单、工具栏、状态栏的管理 文档类(由CDocument派生) 负责组织、管理数据 视图类(由CView派生) 负责与用户交互,显示文档类管理的数据 用GetDocument( )返回文档类的指针 通常在OnDrow( )函数中显示数据 程序员的主要工作 在应用程序类中重写InitInstance虚函数,按自己的需要添加代码 在文档类中声明程序所需要的数据和对这些数据进行操作的接口函数 在视图类(根据需要也可在其他类)中进行消息映射(使用类向导) 在视图类中编写消息处理函数的代码。如果在处理中需要文档类中的数据,要调用视图类的成员函数GetDocument函数获得文档对象,再通过文档类的接口函数对文档中的数据进行处理 在视图类的OnDrow函数中编写窗口重绘时的代码 类的继承关系 获得应用程序类对象的地址 在程序的任何地方,可以使用函数AfxGetApp()返回本程序的应用程序类对象的地址 CWinApp* AfxGetApp( ); CWinApp是应用程序类的基类 获得主框架类对象的地址 CWinApp类由CWinThread类派生 CWinThread类有一个成员变量 CWnd * m_pMainWnd 指向应用程序线程主窗口对象 对于基于文档视图的程序,指向主框架窗口 对于基于对话框的程序,指向对话框窗口 你的应用程序类继承了m_pMainWnd 利用m_pMainWnd可以可以获得主框架窗口(或对话框窗口)对象的地址 注意 m_pMainWnd是CWnd类指针,应把它强制转换为你的主框架类指针(或对话框类指针) 例如 CMainFrame *m_p=(CMainFrame*)AfxGetApp()-m_pMainWnd; 视图类中可以调用CWnd类函数获得其父框架类对象地址 CFrameWnd* CWnd:: GetParentFrame( ) 在主框架类中获得视图类对象的地址 对于SDI程序调用函数: CView *CFrameWnd::GetActiveView( ) 返回当前视图类对象的地址(应进行强制类型转换) 若无当先视图,返回NULL 对于MDI程序 主框架窗口中无视图 每个子框架窗口中才有视图 要先找到当前框架窗口 CMDIChildWnd* CMDIFrameWnd:: MDIGetActive( BOOL* pbMaximized = NULL ) const; 或 CFrameWnd* CFrameWnd::GetActiveFrame() 再获得它的当前视图 CView *CFrameWnd::GetActiveView( ) 在视图类中 获得文档类对象的地址 CDocument* CView::GetDocument( ) 获得其父框架类对象地址 CFrameWnd* CWnd:: GetParentFrame( ) 在文档类中获得视图对象的地址 先获得视图列表中第一个课件视图的位置 使用文档类函数 virtual POSITION GetFirstViewPosition( ) const; 用返回的位置信息( POSITION 类型)获得该视图对象的地址 使用文档类函数 virtual CView* GetNextView( POSITION rPosition ) const; 返回 rPosition 所表示的视图的地址 rPosition 变为下一个视图的位置,无下一视图rPosition为NULL 例如 POSITION pos = GetFirstViewPosition(); while (pos != NULL) { CView* pView = GetNextView(pos); pView-UpdateWindow(); } 文档与视图的相互作用 在文档类中,当数据发生变化,要通知所有视图进行更新,用函数 void UpdateAllViews( … ); //参数见MSDN 当CDocument::UpdateAllViews函数被调用时,会自动调用视图类函数: virtual void CView::OnUpdate(…); //参数见MSDN 当应用程序启动时,或用户选择“新建”或“打开”菜单项时会自动调用视图

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档