- 1、本文档共109页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多数情况下,一个文档对应于一个视图,但有时一个文档可能对应于多个视图,这种情况称之为“一档多视”。MFC对于“一档多视”提供下列三个模式: 在各自MDI文档窗口中包含同一个视图类的多个视图对象。 在同一个文档窗口中包含同一个视图类的多个视图对象。 在单独一个文档窗口中包含不同视图类的多个视图对象。 下面的示例是用切分窗口在一个多文档应用程序Ex_Rect中为同一个文档数据提供两种不同的显示和编辑方式,如图5.27所示。 1. 设计并完善切分窗口左边的表单视图 用MFC AppWizard(exe)创建一个多文档应用程序Ex_Rect。在第6步中将视图的基类选择为CFormView。 打开表单模板资源IDD_EX_RECT_FORM,参看图5.27,调整表单模板大小,并依次添加如表5.10所示的控件。 添加的控件 ID号 标 题 其他属性 编辑框 IDC_EDIT1 —— 默认 旋转按钮 IDC_SPIN1 —— 自动伙伴(Auto buddy)、自动结伴整数(Set buddy integer)、靠右对齐(Alignment Right),其它默认 编辑框 IDC_EDIT2 —— 默认 旋转按钮 IDC_SPIN2 —— 自动伙伴(Auto buddy)、自动结伴整数(Set buddy integer)、靠右对齐(Alignment Right),其它默认 打开MFC ClassWizard的Member Variables标签,在Class name中选择CEx_RectView,选中所需的控件ID号,双击鼠标,依次为下列控件添加成员变量,如表5.11所示。 控件ID号 变量类别 变量类型 变量名 IDC_EDIT1 Value int m_CoorX IDC_EDIT2 Value int m_CoorY IDC_SPIN1 Control CSpinButtonCtrl m_SpinX IDC_SPIN2 Control CSpinButtonCtrl m_SpinY 在CEx_RectDoc类中添加一个公有型的CPoint数据成员m_ptRect,用来记录小方块的位置。在CEx_RectDoc类的构造函数处添加下列代码: CEx_RectDoc::CEx_RectDoc() { m_ptRect.x = m_ptRect.y = 0; // 或m_ptRect = CPoint(0,0) } 用MFC ClassWizard为编辑框IDC_EDIT1和IDC_EDIT2添加EN_CHANGE的消息映射,使它们的映射函数名都设为OnChangeEdit,并添加下列代码: void CEx_RectView::OnChangeEdit() { UpdateData(TRUE); CEx_RectDoc* pDoc = (CEx_RectDoc*)GetDocument(); pDoc-m_ptRect.x = m_CoorX; pDoc-m_ptRect.y = m_CoorY; CPoint pt(m_CoorX, m_CoorY); pDoc-UpdateAllViews(NULL, 2, (CObject *)pt); } 用MFC ClassWizard为CEx_RectView添加OnUpdate的消息函数,并添加下列代码: void CEx_RectView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { if (lHint == 1) { CPoint* pPoint = (CPoint *)pHint; m_CoorX = pPoint-x; m_CoorY = pPoint-y; UpdateData(FALSE); // 在控件中显示 CEx_RectDoc* pDoc = (CEx_RectDoc*)GetDocument(); pDoc-m_ptRect = *pPoint; // 保存在文档类中的m_ptRect } } 在CEx_RectView::OnInitialUpdate中添加一些初始化代码: void CEx_RectView::OnInitialUpdate() { CFormView::OnInitialUpdate(); ResizeParentToFit(); CEx_RectDoc* pDoc = (CEx_RectDoc*)GetDocument(); m_CoorX = pDoc-m_ptRect.x; m_CoorY = pDoc-m_ptRect.y; m_SpinX.SetRange(0, 1024); m_Spi
文档评论(0)