文档与视图的建立和关联

MFC模拟 Windows 文件可视化系统 文章目录一、成果展示二、实现功能2.1 显示树形目录结构2.2 文件操作三、需求分析四、系统设计4.1 数据结构和存储结构的设计4.2 算法设计4.2.1 获取与删除目录: 递归算法五、开发环境六、项目链接 一、成果展示 二、实现功能 2.1 显示树形目录结构 根节点是“我的电脑” “我的电脑”下有几个盘符(C、D、E等)就有几个子节点,递归显 示文件系统下的所有文件信息(分支可以是目录也可以是文件,叶 子节点都是文件) 2.2 文件操作 能够创建目录、创建文件、删除目录、删除文件、复制文件、 阅读详情

本文讨论一下单文档与多视的问题,主要介绍一下笔者在学习VC++6.0过程中探索出的一些个人经验,并给出了实现它们的的主要程序框架。

 


 

 

 

 

本文讨论一下单文档与多视的问题,主要介绍一下笔者在学习VC++6

 

一.建立文档与视图:

 

在Projects选MFC Appwizard(exe),键入工程名,点ok后选单文档,选择默认值,在第四步时,在Advanced…里的Window Styles的Use split window前打√。

 

二.文档多视:

 

当我们需要从不同的角度来看单文档的内容时,这就要我们实现多视了,多视有两种实

 

现方案:静态的和动态的。这就根据不同的需要来实现了。动态的方法一般在程序中已经实现了,自动生成的源代码:

 

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,

 

CCreateContext* pContext)

 

{

 

return m_wndSplitter.Create(this,

 

2, 2, // TODO: adjust the number of rows, columns

 

CSize(10, 10),// TODO: adjust the minimum pane size

 

pContext);

 

}

 

而静态的方法却麻烦一点,下面我详细介绍一下:

 

首先我们先插入一个类:class CMyView : public ClistView

 

在MainFrm.cpp加入#include "MyView.h"

 

在MainFrm.h中声明CSplitterWnd m_splitterWnd; //声明分隔器对象,已经自动生成了。

 

在函数CMainFrame::OnCreateClient里加入下面一些代码,只要把原有的代码删去。

 

If(!m_splitterWnd.CreateStatic(this,1,2,WS_CHILD | WS_VISIBLE))//一行两列

 

return false;//不成功就返回

 

else

 

{

 

m_splitterWnd.CreateView(0,1,RUNTIME_CLASS(CMyEditView),CSize(100,300),pContext);

m_splitterWnd.CreateView(0,0,RUNTIME_CLASS(CMyView),CSize(100,100),pContext);

 

// CmyEditView和CmyView是自己定义的视图类。

//CSize(100,300)是初始化时的大小

return TRUE;//成功的返回值

 

}

 

这样程序一旦执行就会把窗口分割成左右两部分。

 

但是有时我们需要实现这样的功能:一旦发出一个消息时,我要使其中的一个视图消失,研究一下,可以删去或者隐藏这个视图,相对应恢复时就要重建或者显示这个视图,具体的实现在后面再详解吧!

 

由于我们有时分割视图,不是很有规则的1*2,3*1,2*2等形式,而是在分割的视图里再分割,如图:

 

视图二CviewView2

视图一CviewView1

 

视图三CviewView3

 

 

声明一个分隔器对象:在MainFrm.h中声明CSplitterWnd m_splitterWnd1

 

代码为:

  m_wndSplitter1.CreateStatic( &m_wndSplitter,2, 1, WS_CHILD | WS_VISIBLE,

  m_wndSplitter.IdFromRowCol(0, 0));  // 创建各个视

  m_wndSplitter.CreateView(0, 1,RUNTIME_CLASS(CviewView1), CSize(0, 0), pContext);

  m_wndSplitter1.CreateView(0, 0,RUNTIME_CLASS(CviewView2), CSize(0, 0), pContext);

  m_wndSplitter1.CreateView(1, 0, RUNTIME_CLASS(CviewView3), CSize(0, 0), pContext);

 

......

 

如果使用自由定义的视图大小来实现呢?

 

SIZE size;

 

CRect rect;

 

GetClientRect(&rect);

 

size.cx = rect.right/2

 

size.cy = rect.bottom/2;

 

只要把size放在Csize(0,0)所在的位置就可以了,用这个方法我们就可以在程序中自由地实现视图窗口大小的变化了。

到了这里又有一个问题提出来了,我们不光删去或者隐藏视图,有时只是简单的视图之间的切换,也可以说有的一个框架包含多个视,而在任何时刻只能显示其中的一个视,还是后面再说吧!

 

三. 获得视图指针。

 

获取视图的指针作为单独的一点来讲,自然有它的重要性,视图与文档,特别在文档与不相干的视图间,视图与视图间的消息传递及互相之间的调用函数或者变量的时候就要获取视图或文档的指针。

 

a) 获取文档的指针:

 

与文档相连的视图可以直接获取,这里就不说了,但与文档一点关系都没有的视图要想获取文档的指针就不可以直接获取了。

 

CMyEditDoc * pDoc=(class CMyEditDoc *)Getdocument.);

 

上面就是获取的方法。

 

b)获得视图指针:

 

i.在其中的一个视图中获取其它视图的指针:

 

CMainFrame* MainFrame1=(CMainFrame*)this->GetParent()->GetParent();

 

CMyEditView* pView=(CMyEditView*)MainFrame1->m_wndSplitter.GetPane(0,1);

 

This指针代表当前视图的指针,它通过获取CmainFrame的指针再去获取视图的指针,这样有个好处在于可以获得任意视图的指针。

 

还有一种方案可以实现,但是它有个缺点,你只能把获得的指针作为Cview的指针看待,这样你就不能实现特殊视图的功能了。

 

CMyEditDoc * pDoc=Getdocument.);

 

CView * pView;

 

POSITION pos=pDoc->GetFirstViewPosition();

 

if(pos!=NULL)

 

{

 

pView=pDoc->GetNextView(pos);

 

}

 

在{}里加入多个pView=pDoc->GetNextView(pos);(原因我也说不出来)就可以获得你所要得视图。

 

如果你在开始就定义你所接触视图的指针,只不过没有初始化而已,就方面了好多。

 

m_pEditViewright =( CMyEditView* )m_splitterWnd.GetPane(0,1);// m_pEditViewright已定义。

 

ii.在CmainFrame获取视图的指针:

 

CMyEditView* pView=(CMyEditView*)this->m_wndSplitter.GetPane(0,1);

 

这样就行了,同样在文档里获取视图的方法也可以类似,这里就不重复了,但我强调一点要注意头文件的加入。

 

四.单文档多视的实现:

 

a) 单框架窗口中的多视:

 

获取你要处理的两个视图指针: pViewAdd,pViewRemove:

 

// 显示活动视而隐藏非活动视

  pViewAdd->ShowWindow(SW_SHOW);

  pViewRemove->ShowWindow(SW_HIDE);

  // 将新的活动视连接到文档,并断开原来的视与文档的连接。

  pDoc->AddView(pViewAdd);

  pDoc->RemoveView(pViewRemove);

  SetActiveView(pViewAdd);

  RecalcLayout();//告知当前分割窗口,重新显示。

 

方法二你可以把其中的一个视图移到看不到的地方,活动视变换时就是移动的变换。

 

方法三你可以先删去其中的一个视图,需要时再重建,然后删去那个视图。

 

这两个方案在下面再详细说明吧!

 

b)单文档分割视图的某分割区的多视的实现

 

i.移动视图

 

获取视图指针pView

 

pView->SetWindowPos(0, 0, 1000, 1500, 1000, SWP_SHOWWINDOW);

 

这样移动后在当前窗口下你一般是看不到你移动的视图,但当你改变窗口的大小时,有什么情况发生,没有达到你的期望吧,行,你在OnSize这个函数里加入一些代码,比较简单我就不说了。

 

ii.删除视图

 

m_wndSplitter1.DeleteView(0,0); // 删除原来的视

 

运行一下程序还可以,发现我们删除的视图上点击无事件发生,而且出现中断程序。显然只有这句话还不行的,这就要按照你的要求把窗口重新分割一下或者使用一个新的视图来填充一下。

 

重新分割可以用CMainFrame::OnCreateClient里的代码的方法实现它,在这里我就不重复了。

 

五.视图间的通信:

在前面我已经把获取视图的指针作为一大点来解释,其实在不要讲很多大家就会明白的,因为你不管是关联还是不关联的视图,你只要获取它的指针就可以对它进行任意的操作,甚至它的私有函数(当然不能直接了)。下面我就举一例。

 

在CviewView1里加入一个公共函数void simple();

 

如果你要实现的一些功能就可以写在这个函数里

 

void CviewView1::simple()

 

{

 

CClientDC dc(this);

 

dc.TextOut(0,0,"我要实现视图间的通信,我一定会成功的!");

 

}

 

void CviewView2::OnLButtonDblClk(UINT nFlags, CPoint point)

 

{

 

CMainFrame* MainFrame1=(CMainFrame*)this->GetParent()->GetParent();

 

CMyEditView* pView=(CMyEditView*)MainFrame1->m_wndSplitter.GetPane(0,1);

 

pView->simple();

 

}

 

六.CSplitterWnd的扩展:

 

为什么要扩展CSplitterWnd呢?这是从整个界面来想的,当你分割窗口之后就不希望拖动分割条时它位置的改变,你也需要在分割条上有希望的颜色的出现,这时就要扩展CSplitterWnd一下,其实扩展东西很多,我也只简单说一下吧!

 

不希望通过拖动分割条来调节窗口的大小,你就要锁定分割条,根据你的需要让CWnd窗口蔽掉这些消息

 

void CSplitterWnd::onMouseMove(UINT nFlags,CPoint point)

{

CWnd::onMouseMove (nFlags,point);

}

 

七.使用视图控件。

 

在VC++里的MFC提供了三个视图控件:图象列表控件,列表视图控件,树型视图控件。

图象列表控件和列表视图控件都使用的类:CListCtrl。

 

树型视图控件使用的类:CTreeCtrl。

 

具体的控件功能不是本文所讨论的范围。

 

使用视图控件我们可以不向上面那样要分割窗口,你能够在视图里直接添加视图控件,但是很显然有个缺陷:只有上面三个控件,这样它的使用范围很小,有时很难达到多种视图的混用。

 

CListCtrlm_ListView;

 

CTreeCtrlm_TreeView;

 

在你向导生成的视图里定义这两个变量,然后在你需要的地方使用下面的函数:

 

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

 

const RECT& rect就是它的位置,选择适当的地方就能实现分割条的一些功能。

 

其实这些方面不是难点,关键在于如何获得它,产生消息映射是最为困难的地方。在这里你就无法使用以前的消息传递方法,首先我们来简单地理解一下消息机制,由于不同的消息是由操作系统的不同部分或是有应用程序来控制的。当鼠标左键在单击时,这个点击区窗口就收到WM_LBUTTONDOWN消息并处理它,通常它产生一个消息发送给它的主窗口(包含它的窗口),报告“我被单击了。”Win32常用控件将WM_NOTIFY通知发送给它的父窗口,作为应答,MFC调用CWnd::OnNotify()方法来处理这些消息,可以为控件的所有者类重载CWnd::OnNotify()方法。

 

virtual BOOL CWnd::OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );

 

l wParam参数是发送消息的控件ID,如果不来自控件,那么该参数为NULL。

 

l LParam是指向通知消息结构(NMHDR)的指针,它包含当前的通知代码和某些其他信息。

 

l PResult参数是指向LRESULT变量的指针,如果消息被处理,该变量用于存放结果代码。

 

BOOL CView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)

 

{

 

// TODO: Add your specialized code here and/or call the base class

 

TV_DISPINFO *tv_dispinfo=(TV_DISPINFO *)lParam;

 

if (tv_dispinfo->hdr.code==NM_CLICK)

 

{

 

}

 

}

 

这就是一个这种消息机制的简单的例子,你要实现的功能就放在if后的{}里。

 

八.文档与视图的一种常见出错的处理:

 

error C2143: syntax error : missing '';'' before ''*''

 

error C2501: ''CMyViewDoc'' : missing storage-class or type specifiers

 

error C2501: ''Getdocument.#39; : missing storage-class or type specifiers

 

这种错误一般出现在视图的公共变量函数的定义处:

 

CMyViewDoc* Getdocument.);

 

我刚学VC不久,而且不习惯看英文,所以也不知道它出错的原因在哪里,有谁知道不忘告诉我一声了。

 

我一般这样处理之后就好了,先在定义前面加“//”,把它屏蔽掉,按F7,再把“//”去掉,按F7,一看没错了,真的很神了。我在怀疑是不是VC++6.0的一个小小的BUG。

 

MFC中获取各种类指针  1、获取应用程序指针  CMyApp* pApp=(CMyApp*)AfxGetApp();2、获取主框架指针  CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针  CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);  或者  CMainFrame* pMainFrame = (CM 阅读详情

相关推荐

基于Markdown文件的项目管理:从静态文档到动态工作流

Markdown作为一种轻量级标记语言,因其结构化程度适中且人类可读的特性,成为技术文档和项目管理的重要载体。其纯文本本质使得版本控制友好,便于程序化处理。在项目管理领域,将.md文件从静态文档转变为动态项目单元,能够有效解决信息孤岛问题。通过文件解析层提取任务状态和元数据,关联建立层构建项目知识图谱,视图呈现层提供看板、日历等多种视角,实现项目管理自动化。这种方法特别适合技术团队和开源项目,结合MCP协议还能引入AI智能分析。核心价值在于降低迁移成本,保持数据主权,促进知识持续积累,让文档成为工作流程本身

weixin_31188927的博客 339

Objective-C 编程语言(7)关联

转载请标明出处:http://blog.youkuaiyun.com/zhangxingping 关联     关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。     关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。 在类的定义之外为类增加额外的存储空间     使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类

每天进步一点点。 7811

MFC文档视图结构学习笔记

文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理的方法 分为数据的管理和显示,文档用于管理和维护数据,视图用来显示和编辑数据 什么是文档 文档的概念在MFC应用程序中的适用范围很广,一般说来,文档是能够被逻辑地组合的一系列数据,包括

lindagod的专栏 1万+

mfc 多文档,视图和文档的绑定

环境:vs2010 工程“mfc 多文档-office-office2007 1、添加一个FormView(是view的子类) 在资源视图,并绑定类CMyView 添加一个类CMyDoc,其继承CDocument 2、在工程名.cpp函数InitInstance添加 m_pBCTemplate = new CMultiDocTemplate(IDS_TEMPLATE,//文档模

woquNOKIA的专栏 2266

VTK与MFC联合编程实现的单文档实例——vtkSDI详解

首先,下载并安装最新版本的VTK。我们从创建MFC单文档应用程序开始,然后添加VTK的支持,并在应用程序的视图类中创建VTK相关的对象,并将其与MFC窗口关联。然后,我们将VTK渲染器添加到VTK渲染窗口,并将其与MFC窗口进行关联,以便在MFC应用程序中显示VTK场景。vtkSDI的目标是创建一个基于VTK和MFC的单文档应用程序,该应用程序能够显示一个简单的VTK对象并提供一些基本的用户交互功能。在上述代码中,我们可以添加保存和加载VTK场景的代码,以便在文档的序列化过程中保存和加载VTK对象的状态。

NejWeb的博客 435

UG Open二次开发与实例精解

本书综合介绍了利用UG/Open API 进行二次开发所需的基础知识和基本方法,详细介绍了UG Open MenuScript菜单技术,UG/Open UIStyler对话框技术。

MFC文档视图(二)

 一, 在单文档或者是多文档中,有默认的菜单,这里是这些菜单项默认处理,如下:菜单内容命令项ID默认的处理函数预有关联FileNewID_FILE_NEWCWinApp::OnFileNewNoOpenID_FILE_OPENCWinApp::OnFileOpenNoClose(MDI ONLY)ID_FILE_CLOSECDocumemt::OnFileCloseYesSaveID_FILE_SAVECDocument:OnFileSaveYesSave AsID_FILE_SAVEASCDocument

FlowShell的专栏 3169

【机器学习】实验2,基于回归分析的大学综合得分预测(完整代码实现+分析)

大学排名是一个非常重要同时也极富挑战性与争议性的问题,一所大学的综合实力涉及科研、师资、学生等方方面面。目前全球有上百家评估机构会评估大学的综合得分进行排序,而这些机构的打分也往往并不一致。在这些评分机构中,世界大学排名中心(Center for World University Rankings,缩写CWUR)以评估教育质量、校友就业、研究成果和引用,而非依赖于调查和大学所提交的数据著称,是非常有影响力的一个。

高丽大学人工智能硕士在读|专注大模型、RAG、OCR与AI工程实践 1979

MFC-CView类总结

CView类为用户定义的视图类提供了基本的功能。视图被连接到文档上,用作文档和用户之间的媒介:视图在屏幕或打印机上显示文档的图像,并将用户的输入解释为对文档的操作。 视图是框架窗口的子窗口。可能会有多个视图共用一个框架窗口,就像在分隔窗口中那样。视图类、框架窗口类和文档类之间的联系通过CDocTemplate类来建立。当用户打开一个新窗口或将现有窗口分隔为多个时,框架会创建一个新视图并将它连接到文档对象上。 一个视图只能被连接到一个文档,但是一个文档可以有多个视图与...

weixin_49150294的博客 1420

基于ADS的低噪声放大电路设计

1. 低噪声放大器设计理论基础 1.1 低噪声放大器在通信系统中的作用 低噪声放大器的主要作用是放大天线从空中接收到的微弱信号,减小噪声干扰,以供系统解调出所需的信息数据。当今,人们对于各种无线通信工具的要求越来越高,如功率辐射要小、作用距离要远、覆盖范围要广等,这就对系统的接收灵敏度提出了更高的要求,系统接收灵敏度的计算公式为: Smin⁡=−144(dBmHz)+NF+10lg⁡BW(MHz)+SN(dB) {S_{\min }} = - 144\left( {\frac{{{\rm{dBm}}}}{

ASH_GUARDIAN的博客 4万+

基于springboot生鲜食品订购系统的设计与实现

近年来互联网络的迅猛发展和电子终端设备的普及,赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术,时效性是它最大的特色,已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。尽管O2O生鲜食品订购已经有了很大程度的发展,但在微信小程序的O2O生鲜食品订购领域上却少有建设。

1024

建立rails model之间的关系

Building Relationships Between Rails Models Contributed by Brian Leonard, maintained by Gail Chappell September 2007 [Revision number: V6.0-1] This tutorial describes how to build relationships (o...

研究Android技术,以及和Android相关的任何盈利模式 154

MIKE11实战:平原河网水动力建模从入门到精通(附GIS数据处理技巧)

本文系统介绍了MIKE11软件在平原河网水动力建模中的完整实战流程。从GIS数据预处理、河网构建、参数率定到结果分析,详细阐述了构建可靠数字孪生模型的关键步骤与技巧,旨在帮助水利工程师高效解决平原地区复杂水流模拟的挑战,为防洪决策提供科学依据。

weixin_28419039的博客 689

ERwin的学习总结

ERwin的学习总结一 新建domainmodel:file>newnew model type   一般Logical view是用于生成文档的,而physical view是用于生成或者导出脚本的,如果只做文档,可以选择只建立logical view,如果是做项目,需要同时使用Logical view 和physical viewtarget database   ERwin是可以直接连接

xx_liuhui的专栏 2203

别再傻傻分不清!直流有刷、无刷、步进电机,3分钟教你根据项目需求选对电机

本文深入解析直流有刷电机、无刷电机和步进电机的核心差异与应用场景,提供电机选型的黄金法则。通过性能参数对比、成本分析及典型应用案例,帮助工程师根据项目需求精准选择电机类型,避免常见选型误区。特别适合机器人、3D打印等领域的开发者参考。

weixin_29183637的博客 340

云漾AI创作平台实战:如何用GPT4.0+Midjourney快速生成商业级插画(附Prompt模板)

本文详细介绍了如何利用云漾AI创作平台结合GPT4.0和Midjourney快速生成商业级插画。通过智能文案生成与视觉化工作流,大幅提升创作效率,适用于电商、社交媒体等多种场景。文章包含实用Prompt模板和参数调整技巧,帮助设计师和内容创作者高效产出专业插画。

weixin_29251567的博客 222

3.odoo13之跟着官网做项目/实例(模型关联,模型类模型表的关联)

1.建立房地产属性类型的表 还是在models中的estate_property.py中, 并且添加关联,让房地产表和属性表关联起来, 并且加上买方和销售人员,默认系统的模型表, 完整estate_property.py如下代码:(第二个模型类) from datetime import datetime from dateutil.relativedelta import relativedelta from odoo import models, fields, api class.

Mogul的博客 637

语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch)

本文详细介绍了基于PyTorch的轻量级语义通信系统LICRnet的实现,专注于图像压缩重建中的语义信息保留。通过深度可分离卷积、可变窗口多尺度注意力等创新技术,显著降低计算量并提升性能,特别适用于无人机巡检、远程医疗等物联网场景。文章包含完整的代码实现、训练策略及部署优化方案。

weixin_27697385的博客 221

管理系统计算机应用实验报告,管理系统中计算机应用实验报告

管理系统中计算机应用实验报告 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分管理系统中计算机应用实验报告管理系统中计算机应用实验报告专业:旅游管理班级:10工读旅游姓名:程莉苹学号: 027210500218 指导老师:苗文娟试验一数据表的创建一. 实验目的(1).学会数据表结构的创建;(2).学会数据表数据的输入;(3).掌握索引...

weixin_34902900的博客 275

C++面向对象编程-继承与派生练习题

2、共同派生类 3、人员类Person的派生(虚基类的使用)

编程小鹏的博客 1193

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Enterprise Architect使用教程

EA使用教程;类图创建

大致若愚的博客 7万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

探秘Schema,深入解析全方位的数据结构与元数据

Schema 是数据的蓝图,它定义了数据的结构和组织方式,提供了数据的完整性保障和查询优化的能力。合理编写和使用Schema可以提高数据管理和操作的效率和准确性,为企业的数据资产带来更好的价值和应用。

m0_72410588的博客 1219

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MFC文档视图结构分析

文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer模式的具体实现框架之一,Document/View Architecture通过将数据和其表示分开,提供了很好的数据层次和表现层次的解耦。然而,虽然我们使用MFC AppWizard就可以很轻松地获得一个支持Document/View Architecture的MFC程序框架,Document/View Architecture本身的复杂性加上VC产生的一系列代码足够让我们眼花缭乱,一时陷入云里雾里不可自

D_daytime的博客 744

MFC之文档与视图

文档视图结构是使用MFC开发基于文档的应用程序的基本框架,最主要的思想是数据的管理和显示分离。使用文档类管理数据,视图类负责数据的显示,结合数据串行化存储机制,使得开发基于文档的应用程序更加方便。 1.文档-视图结构 文档类CDocument负责维护应用程序所需要的数据,提供一系列可对这些数据进行操作的方法,并且能够为视图提供所需要的数据。视图类CView拥有窗口的客户区域、负责显示文

luoyeaijiao的专栏 1458

C++ MFC文档与视图结构

第二节介绍了文档、视图的关系,两者是一个一对多的映射。一个文档可以对应多个视图,而一个视图只能对应一个文档。举个例子,一个*.html文件,可以用记事本打开,也可以用浏览器打开。这里*.html文件就是文档,记事本和浏览器就是这个文档的两个视图。 文档和视图结构的优势就在于数据的管理与显示分离,数据总是要以一定的结构来存储,而视图负责数据的呈现。数据往往有多种呈现方式,例如一份报表,可以用表格的形...

Vermont_的博客 1084
上一篇: 限定窗口最大化和最小化的大小
下一篇: 实时绘制曲线-SetROP2方法
海浪
博客等级 码龄20年 27粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值