第8章视图应用框架

第8章视图应用框架

ID:44962806

大小:768.00 KB

页数:64页

时间:2019-11-06

第8章视图应用框架_第1页
第8章视图应用框架_第2页
第8章视图应用框架_第3页
第8章视图应用框架_第4页
第8章视图应用框架_第5页
资源描述:

《第8章视图应用框架》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第8章视图应用框架8.1文档与视图的相互作用8.2一般视图框架8.3列表视图框架8.4树视图框架8.5切分视图框架8.6综合应用8.1文档与视图的相互作用1.CView::GetDocument函数视图对象只有一个与之相联系的文档对象,它所包含的GetDocument函数允许应用程序由视图得到与之相联系的文档。假设视图对象接收到了一条消息,表示用户输入了新的数据,此时,视图就必须通知文档对象对其内部数据进行相应的更新。GetDocument函数返回的是指向文档的指针,利用它用户就可以对文档类成员函数及公共数据成员进行访问。当MFCAppW

2、izard产生应用程序CView类时,它同时也创建一个安全类型的GetDocument函数,它返回的是指向用户派生文档类的指针。该函数是一个内联(inline)函数,如下面的代码:CEx_SDIDoc*CEx_SDIView::GetDocument()//non-debugversionisinline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEx_SDIDoc)));//“断言”m_pDocument指针所指向的CEx_SDIDoc类是一个RUNTIME_CLASS类型return(CE

3、x_SDIDoc*)m_pDocument;}8.1文档与视图的相互作用2.CDocument::UpdateAllViews函数如果文档中的数据发生了改变,那么与文档相关联的所有的视图都必须被通知到,以便它们能够对所显示的数据进行相应的更新。UpdateAllViews函数就起到这样的作用,它的原型如下。voidUpdateAllViews(CView*pSender,LPARAMlHint=0L,CObject*pHint=NULL);其中,参数pSender表示视图指针,若在应用程序文档类的成员函数中调用该函数,则此参数应为NULL

4、,若该函数被应用程序视图类中的成员函数调用,则此参数应为this。lHint通常表示更新视图时发送信息的提示标识值,pHint表示存贮信息的对象指针。当UpdateAllViews函数被调用时,如果参数pSender指向某个特定的视图对象,那么除了该指定的视图之外,文档的所有其他视图的OnUpdate函数都会被调用。CView::OnUpdate函数这是一个虚函数。当应用程序调用了CDocument::UpdateAllViews函数时,视图应用框架就会相应地调用该函数。virtualvoidOnUpdate(CView*pSender,

5、LPARAMlHint,CObject*pHint);8.1文档与视图的相互作用其中,参数pSender表示文档被更改的所在视图类指针,当为NULL时表示所有的视图需要更新。默认的OnUpdate函数(lHint=0,pHint=NULL)使得整个窗口矩形无效。如果用户想要视图的某部分无效,那么用户就要定义相关的提示(Hint)参数给出准确的无效区域;lHint和pHint含义同UpdateAllViews。事实上,hint机制主要用来在视图中根据提示标识值来获取文档或其他视图传递来的数据,例如将文档的CPoint数据传给所有的视图类,则

6、有下列语句:GetDocument()->UpdateAllViews(NULL,1,(CObject*)&m_ptDraw);4.CView::OnInitialUpdate函数当应用程序被启动时,或当用户从“文件”菜单中选择了“新建”或“打开”时,该CView虚函数都会被自动调用。该函数除了调用无提示参数(lHint=0,pHint=NULL)的OnUpdate函数之外,没做其他任何事情。但用户可以在视图类中重载此函数,然后对文档所需信息进行初始化操作。例如,如果用户应用程序中的文档大小是固定的,那么用户就可以在此重载函数中根据文档大

7、小设置视图滚动范围;如果应用程序中的文档大小是动态的,那么用户就可在文档每次改变时调用OnUpdate来更新视图的滚动范围。8.1文档与视图的相互作用5.CDocument::OnNewDocument函数在文档应用程序中,当用户从“文件”菜单中选择“新建”命令时,框架将首先构造一个文档对象,然后调用该虚函数,这里是设置文档数据成员初始值的好地方。当然,文档数据成员初始化处理还有其他的一些方法。例如,对于文档应用程序来说,用户还可在文档构造函数中添加初始化代码。MFCAppWizard为用户的派生文档类自动产生了重载的OnNewDocum

8、ent函数,如下面的代码:BOOLCMyDoc::OnNewDocument(){if(!CDocument::OnNewDocument())//注意一定要保证对基类函数的调用,return

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。