CView类为用户定义的视图类提供了基本的功能。视图被连接到文档上,用作文档和用户之间的媒介:视图在屏幕或打印机上显示文档的图像,并将用户的输入解释为对文档的操作。
       视图是框架窗口的子窗口。可能会有多个视图共用一个框架窗口,就像在分隔窗口中那样。视图类、框架窗口类和文档类之间的联系通过CDocTemplate类来建立。当用户打开一个新窗口或将现有窗口分隔为多个时,框架会创建一个新视图并将它连接到文档对象上。
        一个视图只能被连接到一个文档,但是一个文档可以有多个视图与之相连接
       例如,在分隔窗口或多文档界面(MDI)应用程序的多重子窗口中显示的文档就是如此。对于给定的文档类型,应用程序可以支持不同类型的视图;例如,一个字处理程序可能既要提供文档的完整文本视图,又要提供只显示每节标题的大纲视图。这些不同的视图类型可以放在不同的框架窗口中,如果你使用的是分隔窗口,你也可以把它们放在同一框架窗口的不同板块中。
        视图可以响应几种类型的输入,例如键盘输入,鼠标输入或拖放输入,还有菜单、工具条和滚动条产生的命令输入。视图接收框架窗口发送给它的命令,如果视图不接受一个给定的命令,它就将这个命令发送给相连接的文档。与所有的命令目标一样,视图类通过消息映射处理消息。
       当文档的数据变化时,视图类响应这种变化,通常调用文档的CDocument::UpdateAllViews函数,通知所有其它的视图调用OnUpdate函数。OnUpdate数的缺省实现使视图的整个用户区域无效。你可以重载这个函数,只使视图中与文档的变化部分相对应的区域无效。
       如果要使用CView,应当从它派生一个类,并实现它的OnDraw函数(纯虚函数)以在屏幕上显示。你还可以利用OnDraw函数来进行打印和打印预览。框架将处理打印循环以实现对文档的打印和打印预览。通过CWnd::OnHScroll和CWnd::OnVScroll成员函数来处理滚动条消息。你可以在这些函数中实现对滚动消息的处理,你也可以利用CView的派生类SCrollView来处理滚动。

除了CScrollView以外,微软基础类库还提供了其它的CView派生类

CCtrlView 允许你在树,列表和带格式编辑控件中使用文档/视图结构。
CDaoRecordView 在对话框控件中显示数据库记录的视图。
CEditView 提供了一个简单的多行文本编辑器的视图。你可以将CEditView用作对话框中的一个控件,也可以将它用作文档的视图。
CFormView 一种可以滚动的视图,其中包含了对话框控件,它建立在对话框模板资源的基础上。
CListView 使你能够在列表控件中使用文档/视结构的视图。
CRecordView 在对话框控件中显示数据库记录的视图。
CRichEditView 使你能够在带格式编辑控件中使用文档/视图结构的视图。
CScrollView 自动提供滚动支持的一种视图。
CTreeView 使你能够在树控件中使用文档/视图结构的视图。

多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多。2)通过一个文档关联多个视图,窗口显示整个视图。

第一种:利用CSplitterWnd实现分割窗口

CObject
 └CCmdTarget
    └CWnd
       └CSplitterWnd

以上为MFC帮助文档中,CSplitterWnd的层次结构。

CSplitterWnd类提供一个分隔器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口。窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗口ID的任何CWnd对象。
一个CSplitterWnd对象通常被嵌入CFrameWnd或CMDIChildWnd父对象。你应按如下步骤创建一个CSplitterWnd对象:

1. 在父框架中嵌入一个CSplitterWnd成员变量。
2. 重载父框架的CFrameWnd::OnCreateClient成员函数。
3. 从重载的OnCreateClient函数中调用类CSplitterWnd的Create或CreateStatic成员函数。

调用Create成员函数可以创建一个动态的分隔器窗口。动态的分隔器窗口通常用于创建和滚动同一文档的多个窗格或视。框架将自动为该分隔器创建一个起始窗格;然后,当用户操纵该分隔器窗口的控件时,框架创建,调整大小,并且排列其它的窗格。
       当你调用Create时,应指定一个最小行高度最小列宽度,这两个最小值被用来确定窗格什么时候太小以致于不能被完全显示。在调用了Create之后,你可以通过调用SetColumnInfoSetRowInfo调整这些最小值。
       你还可以使用SetColumnInfo和SetRowInfo成员函数来给一列设置一个“理想的”宽度,以及给一行设置一个“理想的”高度。当框架显示一个分隔器窗口时,首先显示父框架,然后才显示分隔器窗口。然后,框架从分隔器窗口的客户区左上角至右下角,根据窗格的理想尺寸以行或列来排放各个窗格。动态分隔器窗口中的所有窗格都必须是同一个类的窗格。

使用CreateStatic成员函数可以创建一个静态分隔器窗口。用户只能修改静态分隔器窗口中的窗格的尺寸,但是不能改变其中的窗格序号和次序。在创建静态分隔器时必须专门创建该静态分隔器的所有窗格。你必须在父框架的OnCreateClient成员函数返回之前确保创建了所有窗格,否则,框架将不能正确显示该窗口。
        CreateStatic成员函数将使用为0的最小行高度和最小列宽度来自动初始化一个静态分隔器。在调用了Create之后,可以通过调用SetColumnInfo和SetRowInfo成员函数来调整这两个最小值。在调用CreateStatic之后,你也可以使用SetColumnInfoSetRowInfo成员函数来指定你所希望的理想窗格值。
        静态分隔器中的窗格通常属于不同的类。分隔器窗口支持特殊的滚动条(除窗格可能带有的滚动框之外)。这些滚动条是CSplitterWnd对象的子对象并且被窗格共享。

当你创建这个分隔器窗口时,你创建了这些特殊的滚动条。例如,如果一个CSplitterWnd具有一行,两列,则WS_VSCROLL风格将显示两个窗格共享的垂直滚动条。当用户移动这个滚动条时,WM_VSCROLL消息将被发送给两个窗格。当窗格设置滚动条位置时,这个共享滚动条将被设置。
可参考以下文章:

MFC 任意分割窗口的小结(CSplitterWndEx)_小七的小世界-CSDN博客_mfc分割窗口

这篇文章讲述了窗口间的通讯,与DIY分割条,也是很重要的。

MFC基于CSplitterWnd类的多窗口分割_翼遥君的博客-CSDN博客

注:要自己派生视图类

第二种实现方法,可参考以下文章:

MFC项目开发之单文档多视图实现_zeng622peng的专栏-CSDN博客_mfc单文档多视图

MFC-CView类总结相关推荐

  1. cview类 public_在MFC单文档的View类中,如何获得指向状态栏的指针

    匿名用户 1级 2016-01-18 回答 众所周知,View窗口覆盖在主窗口MainFrame之上.在CView类的WN_MOUSEMOVE消息响应函数中操作状态栏,可以显示鼠标的位置坐标.这需要在 ...

  2. MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类

    MFC数组类CByteArray: CDWordArray: CPtrArray: CUIntArray: CWordArray: CStringArray: 常用成员函数 1.int Add( AR ...

  3. VS2010-MFC(MFC常用类:MFC异常处理)

    VS2010-MFC(MFC常用类:MFC异常处理) 参考文章: (1)VS2010-MFC(MFC常用类:MFC异常处理) (2)https://www.cnblogs.com/Tang-tangt ...

  4. c语言cfile用法,MFC CFile类读写文件详解

    CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作. 一个读写文件的例子: 文件I/O 虽然使用CArchive类内建的序列化 ...

  5. Visual Studio/MFC编程入门之MFC常用类:CString类

    上一节讲了分割窗口的有关知识,本节开始讲解MFC的一些常用类,先来说说CString类.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...

  6. 【MFC】MFC异常类——异常处理

    01.目录 目录 01.目录 02.异常机制 03.MFC异常宏 04.MFC异常类 05.MFC异常处理 06.MFC异常处理实例 07.小结 02.异常机制 我们开发的软件一般按照正常的流程操作时 ...

  7. BCGControlBar库专业版,完整记录的MFC扩展类

    BCGControlBar库专业版,完整记录的MFC扩展类 BCGControlBar Library Professional (BCGControlBar Pro MFC) 是一个 MFC 扩展库 ...

  8. MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法

    1.获取应用程序指针  CMyApp* pApp=(CMyApp*)AfxGetApp(); 2.获取主框架指针  CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针  CMai ...

  9. MFC CAsyncSocket类基本使用 - 1

    win7, VC6:新建一个对话框工程:菜单选择:插入 - 类:先来做 CAsyncSocket类 作为客户端: 新建类:类的类型为MFC类,基类为CAsyncSocket:如果使用mfc实现套接字, ...

  10. 【MFC】MFC对话框类

    00. 目录 文章目录 00. 目录 01. 概述 02. 通用对话框 03. OLE 通用对话框 04. 属性表类 05. 基于 HTML 的对话框类 06. 其它 07. 附录 01. 概述 类 ...

最新文章

  1. java 国际化 properties_java处理国际化和读取properties文件代码片段
  2. SQL优化—— 大批量插入数据
  3. Teambition CEO齐俊元:大象起舞,现代组织的企业协作
  4. sgu 207 Robbers
  5. 抓包oracle密码,Oracle TNS 协议抓包分析
  6. opencv学习笔记12:图像腐蚀和图像膨胀
  7. OpenWRT设置SmartDNS+ADGuardHome+小喵咪
  8. 三冲IPO,独角兽唱吧能成为“K歌第一股”吗?
  9. minecraft兑换码领取!
  10. fatal: detected dubious ownership in repository at ‘D:/‘之解决方法
  11. 简介一些黑盒测试的方法
  12. hadoop自定义机架实现-08
  13. 微信开发工具制作会动的海绵宝宝
  14. 浅谈android中手机联系人字母索引表的实现
  15. 写给未来的自己几句话
  16. macOS Final Cut Pro X 导入视频、剪切视频
  17. Python 从身份证中提取出生日期/性别/年龄/生肖/星座/省份/城市/城市等级/区县(2019划分标准)
  18. 网页游戏开发例子php,PHP网页游戏学习之Xnova(ogame)源码解读(八)
  19. 课程设计之音乐播放器
  20. Boyer-Moore 算法讲解

热门文章

  1. 万字篇:2020Android面经,历时一个半月,斩获3个大厂offer(京东、新浪、滴滴)
  2. 使用AutoIt自动登录sohu搜狐网页邮箱的代码
  3. 微软 2022 新 bug:大量程序员连夜加班!
  4. Linux:开发:valgrind报错问题总结(2022新)
  5. SecureCRT 8.5字体配色步骤
  6. 【数据库】对不起navicat我投入了DataGrip的怀抱
  7. 郎平卸任女排主帅后,将去北师大珠海校区工作!
  8. Cisco无线网络优化建议-针对于Apple设备
  9. IBM朱辉:大数据分析的5个高复制使用场景及案例分享(含PPT)
  10. java二维数组两种初始化方法