MFC-CView类总结
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之后,你可以通过调用SetColumnInfo和SetRowInfo来调整这些最小值。
你还可以使用SetColumnInfo和SetRowInfo成员函数来给一列设置一个“理想的”宽度,以及给一行设置一个“理想的”高度。当框架显示一个分隔器窗口时,首先显示父框架,然后才显示分隔器窗口。然后,框架从分隔器窗口的客户区左上角至右下角,根据窗格的理想尺寸以行或列来排放各个窗格。动态分隔器窗口中的所有窗格都必须是同一个类的窗格。
使用CreateStatic成员函数可以创建一个静态分隔器窗口。用户只能修改静态分隔器窗口中的窗格的尺寸,但是不能改变其中的窗格序号和次序。在创建静态分隔器时必须专门创建该静态分隔器的所有窗格。你必须在父框架的OnCreateClient成员函数返回之前确保创建了所有窗格,否则,框架将不能正确显示该窗口。
CreateStatic成员函数将使用为0的最小行高度和最小列宽度来自动初始化一个静态分隔器。在调用了Create之后,可以通过调用SetColumnInfo和SetRowInfo成员函数来调整这两个最小值。在调用CreateStatic之后,你也可以使用SetColumnInfo和SetRowInfo成员函数来指定你所希望的理想窗格值。
静态分隔器中的窗格通常属于不同的类。分隔器窗口支持特殊的滚动条(除窗格可能带有的滚动框之外)。这些滚动条是CSplitterWnd对象的子对象并且被窗格共享。
当你创建这个分隔器窗口时,你创建了这些特殊的滚动条。例如,如果一个CSplitterWnd具有一行,两列,则WS_VSCROLL风格将显示两个窗格共享的垂直滚动条。当用户移动这个滚动条时,WM_VSCROLL消息将被发送给两个窗格。当窗格设置滚动条位置时,这个共享滚动条将被设置。
可参考以下文章:
MFC 任意分割窗口的小结(CSplitterWndEx)_小七的小世界-CSDN博客_mfc分割窗口
这篇文章讲述了窗口间的通讯,与DIY分割条,也是很重要的。
MFC基于CSplitterWnd类的多窗口分割_翼遥君的博客-CSDN博客
注:要自己派生视图类
第二种实现方法,可参考以下文章:
MFC项目开发之单文档多视图实现_zeng622peng的专栏-CSDN博客_mfc单文档多视图
MFC-CView类总结相关推荐
- cview类 public_在MFC单文档的View类中,如何获得指向状态栏的指针
匿名用户 1级 2016-01-18 回答 众所周知,View窗口覆盖在主窗口MainFrame之上.在CView类的WN_MOUSEMOVE消息响应函数中操作状态栏,可以显示鼠标的位置坐标.这需要在 ...
- MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类
MFC数组类CByteArray: CDWordArray: CPtrArray: CUIntArray: CWordArray: CStringArray: 常用成员函数 1.int Add( AR ...
- VS2010-MFC(MFC常用类:MFC异常处理)
VS2010-MFC(MFC常用类:MFC异常处理) 参考文章: (1)VS2010-MFC(MFC常用类:MFC异常处理) (2)https://www.cnblogs.com/Tang-tangt ...
- c语言cfile用法,MFC CFile类读写文件详解
CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作. 一个读写文件的例子: 文件I/O 虽然使用CArchive类内建的序列化 ...
- Visual Studio/MFC编程入门之MFC常用类:CString类
上一节讲了分割窗口的有关知识,本节开始讲解MFC的一些常用类,先来说说CString类.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...
- 【MFC】MFC异常类——异常处理
01.目录 目录 01.目录 02.异常机制 03.MFC异常宏 04.MFC异常类 05.MFC异常处理 06.MFC异常处理实例 07.小结 02.异常机制 我们开发的软件一般按照正常的流程操作时 ...
- BCGControlBar库专业版,完整记录的MFC扩展类
BCGControlBar库专业版,完整记录的MFC扩展类 BCGControlBar Library Professional (BCGControlBar Pro MFC) 是一个 MFC 扩展库 ...
- MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法
1.获取应用程序指针 CMyApp* pApp=(CMyApp*)AfxGetApp(); 2.获取主框架指针 CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针 CMai ...
- MFC CAsyncSocket类基本使用 - 1
win7, VC6:新建一个对话框工程:菜单选择:插入 - 类:先来做 CAsyncSocket类 作为客户端: 新建类:类的类型为MFC类,基类为CAsyncSocket:如果使用mfc实现套接字, ...
- 【MFC】MFC对话框类
00. 目录 文章目录 00. 目录 01. 概述 02. 通用对话框 03. OLE 通用对话框 04. 属性表类 05. 基于 HTML 的对话框类 06. 其它 07. 附录 01. 概述 类 ...
最新文章
- java 国际化 properties_java处理国际化和读取properties文件代码片段
- SQL优化—— 大批量插入数据
- Teambition CEO齐俊元:大象起舞,现代组织的企业协作
- sgu 207 Robbers
- 抓包oracle密码,Oracle TNS 协议抓包分析
- opencv学习笔记12:图像腐蚀和图像膨胀
- OpenWRT设置SmartDNS+ADGuardHome+小喵咪
- 三冲IPO,独角兽唱吧能成为“K歌第一股”吗?
- minecraft兑换码领取!
- fatal: detected dubious ownership in repository at ‘D:/‘之解决方法
- 简介一些黑盒测试的方法
- hadoop自定义机架实现-08
- 微信开发工具制作会动的海绵宝宝
- 浅谈android中手机联系人字母索引表的实现
- 写给未来的自己几句话
- macOS Final Cut Pro X 导入视频、剪切视频
- Python 从身份证中提取出生日期/性别/年龄/生肖/星座/省份/城市/城市等级/区县(2019划分标准)
- 网页游戏开发例子php,PHP网页游戏学习之Xnova(ogame)源码解读(八)
- 课程设计之音乐播放器
- Boyer-Moore 算法讲解
热门文章
- 万字篇:2020Android面经,历时一个半月,斩获3个大厂offer(京东、新浪、滴滴)
- 使用AutoIt自动登录sohu搜狐网页邮箱的代码
- 微软 2022 新 bug:大量程序员连夜加班!
- Linux:开发:valgrind报错问题总结(2022新)
- SecureCRT 8.5字体配色步骤
- 【数据库】对不起navicat我投入了DataGrip的怀抱
- 郎平卸任女排主帅后,将去北师大珠海校区工作!
- Cisco无线网络优化建议-针对于Apple设备
- IBM朱辉:大数据分析的5个高复制使用场景及案例分享(含PPT)
- java二维数组两种初始化方法