MFC体系结构(2)

一、CWind类 

1.工具/提示支持

为用户提供简短帮助

a.EnableToolTips打开提示功能

OnToolHitTest判断是哪个字控件要显示Tooltip

b.UpdateData  (DDV 对话框数据交换) 把MFC成员变量值给控件,或者控件的值交换给成员变量

c.UpdateDialogControls 比如对话框改变大小 刷新对话框控件

d.窗口居中

e.RunModalLoop  ContinueModal  EndModalLoop

暂时接管线程的消息循环,可以做消息过滤,比如你手动实现模态对话框

你打开对话框,你只有对这个窗口的消息才处理,其他所有的都过滤掉.

二、CFrameWnd类 框架窗口

1.活动框架视图文档支持

a.GetActiveDocument()获取活动激活的文档

GetActiveView()获得活动激活的视图  SetActiveView()设置活动激活视图

GetActiveFrame() 获得激活的框架

b.GetTitle()  SetTitle() 设置框架标题

c.SetMessageText()  设置消息提示框的标题

d.BeginModalState() EndModalState() InModalState()

辅助对话框模态状态,模态对话框弹出来的时候,框架窗口是不激活的

但是,不激活的时候,你点击他会闪动,提示用户我是不激活的,

都需要上面的API来控制这些状态.


2.框架窗口和视图的关系

a.最外层是Frame Window Object 框架窗口对象,显示整个框架窗口.

b.View Object是一个子窗口,实际上就是客户区,被View视图类分配,

共享了框架窗口的DC,框架窗口包着视图.视图可以有各种显示的内容.

c.View视图负责和Document通讯,这就是一个典型的文档视图

应用框架.


3.更多的是在派生类里的支持,尤其是CMDIFrameWnd

他就是说对自己的客户区划分,有些客户区可工具条,给面板,

有些则要给子框架,还有一些客户区要分配给状态栏,菜单条.


三、CViwe类 视图类

1.派生类必须重载方法

a.virtual void OnDraw(CDC* pDC) = 0;

OnPaint里调用的子方法,OnPaint之前还要对DC做一个预处理

区分你是打印环境,还是打印预览,还是屏幕显示,OnDraw里面

你就不用再去区分现在是打印状态,我的做标书是什么样子等待.

OnDraw就是专心的进行绘制,图形绘制,信息显示.

绘制需要的参数,做标什么的,都在OnPrint里完成

OnPaint()方法在调用OnDraw方法向显示器输出之前需要做大量的准备工作,

其中之一就是准备一个跟显示器相关的DC对象,并把此对象传递给OnDraw方法,让其用此对象向显示器输出

OnPrint()方法在调用OnDraw方法向打印机输出之前同样作很多准备工作,

其中之一就是准备一个跟打印机相关的DC对象,并把此对象传递给OnDraw方法,让其用此对象向打印机输出。

b.virtual void OnUpdate(CView* psender,LPARAM lHint, CObject* pHint);

在文档内容发生变更的时候,他就通知视图改变你的显示,这个往往是用在

一个文档多个视图的时候.其中有个视图有个用户在这个视图操作了一个东西,

那就会接到OnUpdate消息,psender是谁发起改变的操作,如果是NULL就是改变

所有的视图,如果某个视图发现psender和自己的this是相等的,就表示是自己,

自己则是已经更新过了,则不需要再次更新. 频繁调用会较低效率.


2.其他重要方法

a.GetDocument()得到视图对应的文档

b.OnActivateView()View激活的时候

c.OnActivateFrame()视图所在框架激活的时候

d.其实这两个激活任选其一即可,不用再两个内都写代码

因为View实际就代表了框架窗口的客户区,你框架窗口激活,

你客户区也必须激活,你客户区激活框架窗口也激活


3.View种类特点和用途(可用的派生类)

a.CEditview    简单文本编辑视图      记事本

b.CFromView    带丰富控件的类对话框视图  数据库应用

c.CHtmlEditviw   HTML编辑显示视图       HTML编辑器

d.CHtmlView    HTML显示视图        电子邮件应用.浏览器

e.CListView    简单列表视图        类电子表格应用(需改进)

f.CRichEditview   RTF文本编辑视图       写字板等

g.CScrollView    带滚动条的简单视图    绘图冉家,CAD画板

h.CTreeView    树形控件视图        显示树形信息的应用


原文地址:http://blog.51cto.com/12158490/2095410

时间: 2025-01-18 07:28:57

MFC体系结构(2)的相关文章

MFC体系结构(1)

一.CWndThread类 1.CWndThread类其实就是一个线程封装类,他有两种模式 a.工作者线程,他没有消息循环, 用来做耗时计算, 线程函数 UINT _cdecl MyThreadProc(LPVOID param); 启动线程 AfxBeginThread(线程的入口函数,如果函数参数, 优先级 = 0,栈大小=0, 创建后的状态(挂起或者创建就运行)默认是运行,安全性默认NULL.) b.UI界面线程,CWinThread派生类,他有Windows消息循环 他的使用发送和工作者

MFC体系结构(3)

一.文档视图关系示意图 1.可见部分其实就是一页一页, 比如一本书就有很多页,总不能同时显示很多页吧 2直方图显示文档中,可视部分的第一部分 3.使用框架窗口2,视图2显示,也就是说一个Document可以对应多个视图(View) 4.文档可视部分的第二部分,它可能就是对应一个表格,就是视图3和框架窗口3. 5.第二部分数据也可以用折线图来显示, 6.最重要的是用户可以在视图3里输入,视图3将用户输入的数据翻译,然后存储到文档中去. 一个文档对象他对应多个视图, 有些视图是纯粹显示用的, 有些则

MFC六大机制 (1) MFC程序的初始化

本章将先介绍 MFC 的文档/视图结构,讲解实现该结构的数据结构,然后编写一个控制台应用程序来模拟 MFC 的初始化,理清 MFC 初始化的顺序,然后说明如何创建一个最基本的 MFC 应用程序. MFC 最重要的结构 文档/视图结构 MFC 提供了构造Windows应用程序的框架,它不仅为应用程序建立标准的结构,生成一系列启动文件,还提供标准的图形用户界面如菜单.工具栏.状态条等供开发人员在程序中补充完善,开发人员只需要完成针对待定应用的代码即可.其中最重要的框架就是其于文档/视图结构的文档应用

从C++起步到MFC实战VC++软件工程师高端培训视频教程

本课程从C++起步.用户无需任何计算机基础,只需要懂的基本的电脑操作,既可学习本课程,本课程适合在校大学生,在职人员等,通过本课程的学习,学员可掌握C++\MFC\VC++服务器端.网络编程等技能 有兴趣的可以加我个人QQ:779591710 第一阶段:C++入门超基础精讲(28课时)主要内容:本部分是您成为VC++软件工程师必备的阶段,如果您没有任何基础,学习C++能快速让您进入编程领域,建议配合书籍<C++入门经典> 第1讲:程序设计语言原理及C++入门(6课时)第2讲:基本数据类型扩展数

MFC框架剖析和消息机制

即便是基于MFC的应用程序,建立窗口类也是会遵循如下的过程: 设计窗口类->注册窗口类->生成窗口->显示窗口->更新窗口->消息循环->消息路由到窗口过程函数处理.下面就剖析一下在MFC中是如何完成上述过程的. (1)每个应用程序都有且仅有一个应用类的全局变量theApp,全局变量先于WinMain函数进行处理. (2)WinMain函数体在APPMODUL.CPP文件中,定义如下: extern "C" int WINAPI _tWinMain(

stdafx.h、stdafx.cpp两个文件的作用

stdafx.h.stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? 这两个文件用于建立一个预编译的头文件.PCH和一个预定义的类型文件STDAFX.OBJ. 由于MFC体系结构非常大,包含许多头文件,如果每次都编译的话比较费时.因此,我们把常用的MFC头文件都放在stdafx.h中,如afxwin.h.afxext.h.afxdisp.h.afxcmn.h等,然后让stdafx.cpp包含这个stdafx.h文件.这样,由于编译器可以识别哪些文件已经编译过

文档/视图结构详细介绍

以单文档界面(SDI)应用程序为例,介绍MFC的文档/视图程序结构. 学习要求 理解文档/视图结构,可在AppWizard生成的SDI程序框架的基础上添加必要的代码,以生成自己的应用程序. 授课内容 大部分应用程序均要使用数据,其主要工作可以分为两部分:一是对数据的管理,如存储.复制和查询等任务,一是对数据的处理和输入输出,包括显示和打印.MFC提供了“文档/视图”结构支持这类应用程序. 12.1文档/视图概念 在文档/视图结构里,文档可视为一个应用程序的数据元素的集合,MFC通过文档类提供了大

关于找不到stdafx.h头文件问题

代码: #include "stdafx.h" #include "stdlib.h" char* getcharBuffer() { return "1919,3a3a"; } void changeto4(char * buffer) { while(*buffer) { if(*buffer == '3') { *buffer='4'; } buffer++; } } int _tmain(int argc, _TCHAR* argv[])

VC++软件工程师高端教程

从C++起步到MFC实战VC++软件工程师高端培训(服务器端开发方向) http://www.dwz.cn/u3wMp 咨询QQ2110053820 课程讲师:Gamebaby 课程分类:品牌套餐 适合人群:初级 课时数量:350课时 更新程度:完毕 用到技术:TCPIP协议.HTTP和FTP协议 涉及项目:LSP项目.LSPSetup项目 课程简介 本课程从C++起步.用户无需任何计算机基础,只需要懂的基本的电脑操作,既可学习本课程, 本课程适合在校大学生,在职人员等,通过本课程的学习,学员可