轻松玩转MFC文档视图--快速入门

合集下载

VS2010和MFC编程入门之40(文档、视图和框架:各对象之间的关系)

VS2010和MFC编程入门之40(文档、视图和框架:各对象之间的关系)

VS2010MFC编程入门之四十(文档、视图和框架:各对象之间的关系)文档、视图和框架的概述,这里主要讲解文档、视图、框架结构中各对象之间的关系。

各个对象之间的关系文档、视图、框架结构中涉及到的对象主要有:应用程序对象、文档模板对象、文档对象、视图对象和框架窗口对象等。

根据上一节的概述,大家对它们的概念已经有所了解了,下面就对它们之间的关系进行总结和概括,并对各个关系中用到的类的成员函数进行介绍。

1. 应用程序对象保存了一个文档模板的列表。

在任何对象中调用全局函数AfxGetApp都可以获得应用程序对象的指针。

通过调用CWinAppEx::GetFirstDocTemplatePosition、CWinAppEx::GetNextDocTemplate函数可以遍历所有的文档模板。

2. 文档模板对象用于维护文档、视图和框架窗口的映射关系,它包含有一个已打开文档的列表。

我们可以通过调用CDocTemplate::GetFirstDocPosition、CDocTemplate::GetNextDoc来遍历该文档模板对应的所有文档。

3. 框架窗口对象中包含有指向当前活动视图对象的指针。

AfxGetApp()->m_pMainWnd即为主框架窗口对象的指针。

我们可以通过调用CFrameWndEx::GetActiveView来获取当前活动视图对象的指针,并且使用CFrameWndEx::GetActiveDocument函数可以获得当前活动视图对应的文档。

4. 文档对象中维护着该文档的视图列表,以及创建该文档的文档模板对象的指针。

我们可以通过调用CDocument::GetFirstViewPosition,CDocument::GetNextView来遍历该文档关联的所有视图,调用CDocument::GetDocTemplate获取创建该文档的文档模板对象的指针。

5. 视图是框架窗口的子窗口,它保存有指向对应的文档对象的指针。

VS2010和MFC编程入门之39(文档、视图和框架:概述)

VS2010和MFC编程入门之39(文档、视图和框架:概述)

VS2010MFC编程入门之三十九(文档、视图和框架:概述)菜单、工具栏和状态栏的使用,这里开始将为大家讲解文档、视图和框架的知识。

文档、视图和框架简介在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工程Example34中,我们可以看到MFC向导自动为我们生成了CExample34Doc类、CExample34View类和CMainFrame类,它们就分别是文档类、视图类和框架窗口类。

文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展。

下面分别介绍这种结构中涉及到的几个重要概念。

文档文档对象用于管理和维护数据,包括保存数据、取出数据以及修改数据等操作,在数据被修改以后,文档可以通知其对应的所有视图更新显示。

视图视图对象将文档中的数据可视化,负责从文档对象中取出数据显示给用户,并接受用户的输入和编辑,将数据的改变反映给文档对象。

视图充当了文档和用户之间媒介的角色。

框架一个文档可能有多个视图界面,这就需要有框架来管理了。

框架就是用来管理文档和视图的。

框架窗口是应用程序的主窗口,应用程序执行时会先创建一个最顶层的框架窗口。

视图窗口是没有菜单和边界的子窗口,它必须包含在框架窗口中,即置于框架窗口的客户区内。

文档模板文档模板中存放了与文档、视图和框架相关的信息。

应用程序通过文档模板创建文档对象、框架窗口对象和视图对象。

另外,文档、视图和框架之间的关系也是由文档模板来管理的。

我们来看看Example34单文档程序中,CExample34App应用程序类的成员函数CExample34App::InitInstance()创建并注册文档模板的部分:C++代码BOOL CExample34App::InitInstance(){......略// Register the application's document templates. Document templates// serve as the connection between documents, frame windows and views CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CExample34Doc),RUNTIME_CLASS(CMainFrame), // main SDI frame windowRUNTIME_CLASS(CExample34View));if (!pDocTemplate)return FALSE;AddDocTemplate(pDocTemplate);......略return TRUE;}在构造文档模板类CSingleDocTemplate的对象时,第一个参数是资源IDIDR_MAINFRAME,它包括框架窗口图标等,后面的三个参数都是RUNTIME_CLASS 宏的调用,RUNTIME_CLASS用于获取类的运行时信息,文档模板可以根据这些动态创建信息来创建相应类的对象,即文档对象、框架窗口对象和视图对象。

MFC文档视图结构-上机步骤

MFC文档视图结构-上机步骤

实验1 . MFC对话框应用程序练习一、上机题目:1.一个简单的单文档应用程序——记事本程序2.文档串行化编程3. 简单的班级学生查询系统(单文档多视图编程)二、上机目的:1.通过这些程序可以达到以下目的:2.文档视图框架3.文档、视图、框架之间的相互作用三、题目说明1.记事本程序利用AppWizard,自动产生一个记事本程序。

2. 文档串行化编程1)定义一个日期结构(包括年月日)置于文档对象中,在文档对象中序列化保存和读取,并在视图中显示日期信息(可以在编辑视图或普通视图中显示)。

并通过对话框修改该信息。

注:普通视图中显示文本方法:重载视图OnDraw函数,利用其中pDC->TextOut函数输出相关信息。

2)建立一个表单视图(FormView),在建立控件输入矩形的左上角和右下角,在另外一个控件中显示该视图。

注:视图会话函数:CDC* pDCTemp=m_Ctrl.GetWindowDC(); 得到视图的设备pDCTemp->Rectangle(m_x1,m_y1,m_x2,m_y2); 绘制矩形3.简单的班级学生查询系统1)建立两个视图,其中左边为一个树视图,根节点为为学院(系)(这一级至少要有两个节点如计算机学院、软件学院),二级节点为学院的系(专业)(可以只针对计算机学院输入相关二级节点,如包括网络工程、计算机科学、软件学院),右边为列表视图包含学生的姓名、学号、课程成绩等。

2)要求当选择左边的计算机学院时,右边视图显示所有计算机学院的学生信息,当选择网络工程专业,只选择网络工程专业的学生信息。

提交网站:实现步骤:例1.一个简单的单文档应用程序——记事本程序1. 只要在AppWizard的Step 6将Base Class设置为EditView,AppWizard就自动完成了一个记事本程序的设计:2. 运行程序,即可测试记事本的各种功能:3.说明:(1)打开Workshop中的Class视图,可以看到,一个简单的单文档应用程序向导自动:建立五个类(2(3)每个类的主要函数:void CAboutDlg::DoDataExchange(CDataExchange* pDX)int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)//创建窗体的工具栏,状态栏等BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)BOOL CXxxApp::InitInstance()void CXxxApp::OnAppAbout()BOOL CXxxDoc::OnNewDocument()//初始化文档字符数据、字体信息等void CXxxDoc::Serialize(CArchive& ar)BOOL CXxxView::PreCreateWindow(CREATESTRUCT& cs)void CXxxView::OnDraw(CDC* pDC)BOOL CXxxView::OnPreparePrinting(CPrintInfo* pInfo)//弹出打印对话框void CXxxView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)void CXxxView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)CXxxDoc* CXxxView::GetDocument() // non-debug version is inline例2.文档串行化编程将C++对象以字节流的形式保存在二进制文件中称为对象的串行化处理,经过串行化处理的称为持久对象,可以按需要在程序运行中存储和恢复。

MFC快速入门

MFC快速入门

MFC快速入门湖北师范学院高福来1.什么是MFCMFC是微软公司提供给用户使用的基本类库。

也就是微软公司定义了一些常见的类,作为用户只要调用它内部的成员函数即可。

2.为什么要MFC在回答这个问题之前,我们来想一个问题:自己家在建造房子时,不需要我们懂得制造砖,水泥等,我们关心的如何设计好房子的结构。

换句话讲,可以将一些公共操作的东西抽象出来封装一个类,我们只需关心要完成的操作。

再比如,我们买了一个花瓶,不需要它制造的细节,我们只关心它放在哪个地方比较美观,了解的属性即可。

使用MFC的一个好处是缩短了软件开发的周期。

3.使用MFC前需要了解的知识1)事件用户做出的一个动作就是事件。

比如说:单击按键;点了鼠标等。

2)消息当用户完成了一个事件,就向计算机发送了一个消息。

比如说用户点击了按键,它就向计算机发送一个消息:我点击了按钮。

这里有一个问题:计算机如何知道点击了按钮?要回答这个问题需要用第三点来解答。

3)消息映射操作系统一直在“监视”着用户的每一个操作,一旦有消息输入,操作系统立即调用相应的函数来处理。

这里的消息与某个函数就是一个一一映射。

比如:按钮的处理函数是显示一个对话框OnShow(),如果用户点击了它,则进入到OnShow()中完成相应的功能。

4)面向对象MFC只是一个框架,它的编程基本依然是面向对象的东西。

有几个常见的概念需要明白:◎类:将具有共同特征的一类东西抽象出来就是类。

类从本质上讲,是一种“数据结构”。

比如:人就是一个类。

◎对象:类的实例化就是对象。

比如:张三就是人的实例,张三就是一个对象。

◎封装:实现信息的隐藏,防止用户随意破坏。

◎继承:子类扩充父类的功能。

比如:儿子继承了双亲的特性。

◎多态:对于同一个事件,可能有不同的处理结果。

比如:对于上课钤响了,学生可能要停止讲话准备上课,老师要到教室给学生上课,而对于有些人来讲,根本没有什么反应。

4.关联变量问题:为什么要关联变量?关联变量相当于别名,使用别名是为了简化操作。

轻松玩转MFC文档视图架构编程

轻松玩转MFC文档视图架构编程
(4)框架窗口:
// frame windows class CFrameWnd; // standard SDI frame class CMDIFrameWnd; // standard MDI frame class CMDIChildWnd; // standard MDI child class CMiniFrameWnd; // half-height caption frame wnd
这个特性强调了架构的外部特征,即架构具有可学习、可再生、可实例化的特点,是所有基于该架构 所构造实例的共性,是贯串在它们体内的一根"筋",但各个基于该架构所构造的实例彼此是存在差异的。
(2)它是一个由内部有联系的事物所组成的一个有机整体。架构中的内部成员不是彼此松散的,并非 各自"占山为王",它们歃血为盟,紧密合作,彼此都有明确的责任和分工,因此共同构筑了一个统一的基 础性平台、一个统一的模型。譬如,OSI 模型从物理层到应用层进行了良好的合作,虽然内部包含了复杂 的多个层次,但仍然脉络清晰。
在这里,我们再引用几位专家(或企业)关于架构的定义以供读者进一步参考:
The key ideas of a commercial application framework : a generic app on steroids that provides a large amount of general-purpose functionality within a well-planned, welltested, cohesive structure. (Application framework is) an extended collection of classes that cooperate to support a complete application architecture or application model, providing more complete application development support than a simple set of class libraries. ――MacApp(Apple's C++ application framework) An application framework is an integrated object-oriented software system that offers all the application-level classes(documents, views, and commands)needed by a generic application. An application framework is meant to be used in its entirety, and fosters both design reuse and code reuse. An application framework embodies a particular philosophy for structuring an application, and in return for a large mass of prebuilt functionality, the programmer gives up control over many architectural-design decisions. ――Ray Valdes

MFC 文档视图小程序详细步骤

MFC 文档视图小程序详细步骤

文档视图上机指导书【例8.1】文档视图结构应用程序例子(Ex_DocVie w)。

(1)创建基于CFormV iew类的多文档应用程序用MFC AppWizard(exe)创建一个默认的多文档应用程序Ex_DocView,但在向导的第六步将CEx_DocView V iew的基类由默认的CV iew选择为CFormView类,如图8.2所示。

图8.2 设置视图的基类为CFormV iew类(2)添加应用程序所需的数据■第一步在V isual C++中,选择菜单【插入】 【新建类】,打开新建类对话框。

在“Class type”组合框中选择Generic Class,类名为CStudent,默认的类文件为Student.cpp,设置该类的父类为CObject,并单击【OK】按钮。

如图8.3所示。

图8.3 添加CStudent类■第二步打开项目工作区的文件视图,双击打开Student.h文件,如图8.4所示,编辑CStudent类定义的代码如下:class CStudent : public CObject{public:long m_nCode;CString m_sName;long m_lAge;double m_lScore;CStudent();CStudent(long,CString,long ,double);virtual ~CStudent();};图8.4 打开Student.h文件■第三步同上步,编辑Student.cpp文件,修改类CStudent的构造函数实现代码如下:CStudent::CStudent(long code,CString name,long age,double score){m_nCode=code;m_sName=name;m_lAge=age;m_lScore=score;}■第四步在Ex_DocV iewDoc.h文件中,为类CEx_DocV iewDoc添加数据成员:class CEx_DocViewDoc : public CDocument{……public:POSITION curPos;CTypedPtrList <CObList, CStudent*> m_dataList;……}说明:m_dataList定义为CStudent类指针的表CtypedPtrList变量,curPos定义为POSITION变量,用来指示当前指针。

MFC文档与视图深入详解

MFC文档与视图深入详解

1.1 MFC 文档视图结构程序结构总揽当我们使用MFC AppWizard 生成一个MFC 程序,选用所有默认的设置(当然也是Multiple Documents ,本文讨论主要基于Multiple Documents ,对于Single Document 情况仅以简单表述提及,皆因后者和前者很多相似相同之处,但前者更为复杂,并且更加常用。

),假设你的程序名称为 A ,则你会得到CMainFrame 、CChildFrame 、CAboutDlg 、CADoc 、CAView 、CAApp 6 个类(Single Document 仅少一个CChildFrame 类,其余均同)。

这些类的具体含义将在后面给出,这里先要给出一个MFC 支持文档视图结构程序(以下简称App )的主要组成:一个App (对应类CAApp )可以包含多个文档模版(CDocTemplate ),但是MFC AppWizard (无论是SDI 还是MDI )都只是默认生成一个。

但是在实际开发中一个文档模版不够,需要自己手工添加(在后面实际项目例子提供示例)。

这个结构是通过MFC 中CWinApp 的成员变量CDocManager*m_pDocManager 实现的,我们的CAApp 正是继承自MFC 提供的CWinApp 类。

CDocManager 类则拥有一个指针链表CPtrList m_templateList 来维护这些文档模版。

这些文档模版都是在CAApp ::InitInstance ()中通过AddDocTemplate(pDocTemplate) 。

CDocTemplate 拥有3 个成员变量,分别保存着Document 、View 、Frame 的CRuntimeClass 指针,另外持有成员变量m_nIDResource ,用来指定这个Document 显示时候采用的菜单资源。

这 4 份数据都在CAApp ::InitInstance ()中CDocTemplate 的构造函数中指定。

5、MFC文档视图结构

5、MFC文档视图结构

三、文档视结构的运行机制(方式)
1)视图类调用GetDocument成员函数获 得相关联的文档对象指针,从文档中读取数 据。 2)视图把数据显示在屏幕上用户交互 数据修改。 3)视图将经过修改的数据传递给文档对象, 进行数据更新。
四、文档视结构中各类的重要函数 几个重要的函数
一个简单的数据分析软件
2、直方图计算算法
假如有一个有16个数的数列:1 1 1 3 2 1 4 5 3 2 4 5 5 4 3 3 ,这些数都在0~5之间。 数0,1,2,3,4,5在这个数列中出现的次数就是这个数 列的统计直方图。 思考: (1)这些数出现的概率呢? (2)计算机如何实现求直方图
MDI的应用程序每次可以读写多个文件 或文档,可以同时对多个文档进行操作, 可以有多个子窗口。
例如:Windows的Word
一、文档视结构概述
SDI和MDI主要差别(程序员角度)

SDI不需要生成CChildFrame类 SDI应用程序的CMainFrame类的基类为CFrameWnd MDI应用程序的CMainFrame类的基类为CMDIFrameWnd
应用程序类
管理应用程序本身,负责和OS进行交互(获取或发送 消息等)
二、基于文档视结构的程序框架构成
文档
class CDocument;
视图
class CView;
框架类
class CFrameWnd; class CMDIFrameWnd; class CMDIChildWnd; //standard SDI Main Frame //stardard MDI Main Frame // standard MDI child Frame

MFC 编程基础 2 文档_视图

MFC 编程基础 2 文档_视图

第2章文档/视图结构应用程序1. 文档/视图结构的思想是将数据的管理与显示分离,其中文档用于管理应用程序的数据,而视图是用户界面,用于显示、打印文档中的数据,并管理与用户的交互。

2. SDI(单文档界面) 应用程序具有文档/视图结构的程序框架,该框架包括应用程序类、窗口框架类、文档类和视图类,编程的任务是在文档类和视图类中添加适当的代码。

其中文档类中一个重要的成员函数是OnNewDocument(),用户在此添加代码完成对数据的初始化;而视图类中最重要的成员函数是OnDraw(),通过在该函数中添加代码实现窗口内容的输出。

3. 通过介绍几种SDI结构的典型应用程序来了解其结构及设计方法,典型应用包括:•利用画笔、画刷等工具及位图处理的方法实现文字和图形的输出。

•利用定时器控件制作动画程序。

•对鼠标和键盘进行编程的基本方法。

•文件、字体、颜色等几种通用对话框的使用方法及自定义对话框的设计、调用方法。

•菜单的设计方法。

2.1 文档/视图结构SDI 应用程序由AppWizard(应用向导)创建好后,即使没有编写一行代码,仍然可以运行,并且具有一个标准Windows应用程序所需要的组成成份,程序员的工作就是往这个框架添加必要的代码。

以下通过一个简单实例说明文档/视图结构应用程序的创建过程。

【例2.1】创建一个如图所示的应用程序,在窗口中显示一个矩形框,框中显示“同舟共济自强不息”。

框架窗口的视图假定本例的工程名为TEST ,程序创建过程如下:(1)利用AppWizard 创建一个SDI 应用程序框架。

(2)文档类是存放数据的主要地方,本例在其中说明一个存放矩形框数据的CRect 类对象r 和一个存放字符串的CString 对象s ,方法为:在工作区的“ClassView ”中,双击文档类CTESTDoc 类,在该类代码中添加如下代码:public:CRect r;CString s;说明:CRect 是MFC 定义的一个类,有4 个数据成员:left 、top 、right 和bottom 。

mfc使用教程

mfc使用教程

mfc使用教程MFC使用教程不要标题MFC是Microsoft Foundation Class的缩写,是一套C++的库,用于开发Windows平台的应用程序。

以下是一个简单的MFC使用教程,帮助你了解如何创建一个基本的MFC应用程序。

首先,打开Visual Studio并选择创建新项目。

在项目模板中,选择"MFC应用程序"。

在下一步中,选择"对话框"作为应用程序类型。

接下来,选择项目的名称和位置,然后点击"完成"按钮。

Visual Studio将自动生成一个MFC应用程序的基本框架。

应用程序的主要代码位于"MainFrm.cpp"和"MainFrm.h"文件中。

打开"MainFrm.cpp"文件,你将看到一个名为"Create"的函数。

在这个函数中,可以创建应用程序的主窗口。

在"Create"函数的内部,使用"MFC应用程序向导"提供的函数来创建一个对话框。

例如,可以使用"CDialogEx"类来创建一个简单的对话框。

在"Create"函数的最后,需要调用"ShowWindow"函数显示主窗口,并调用"UpdateWindow"函数来更新窗口。

在"MainFrm.h"文件中,你可以定义应用程序的主窗口类。

例如,可以继承自"CFrameWnd"类,并添加自定义的成员变量和函数。

在"MainFrm.cpp"文件的"Create"函数中,还可以添加一些自定义的代码,例如设置窗口的标题和大小,添加菜单和工具栏等。

最后,编译并运行应用程序。

你应该能够看到一个简单的MFC应用程序的窗口。

MFC使用教程范文

MFC使用教程范文

MFC使用教程范文MFC(Microsoft Foundation Classes)是微软开发的一种用于Windows操作系统的C++类库,可用于开发图形用户界面(GUI)应用程序。

MFC使用教程将指导您如何使用MFC库来创建基于Windows的应用程序。

第一部分:基本概念和环境设置(200字)在开始使用MFC之前,您需要了解一些基本概念和环境设置。

首先,MFC是一个C++类库,包含了各种用于构建Windows应用程序的类和函数。

它提供了处理窗口、控件、消息等等的功能。

其次,您需要一个C++编译器和开发环境,如Visual Studio。

确保您已经安装了Visual Studio以及所需的MFC组件。

第二部分:创建一个MFC应用程序(300字)步骤1:打开Visual Studio并选择创建“新项目”。

步骤2:选择MFC应用程序向导,并输入项目名称和位置。

步骤3:选择应用程序类型(单文档/多文档/对话框)。

步骤4:在向导的下一步中,选择所需的特性和选项。

步骤5:在应用程序向导中完成剩余设置,并单击“完成”来创建项目。

步骤6:Visual Studio将自动生成与所选应用程序类型相对应的源代码和资源文件。

第三部分:了解主要概念(300字)在了解如何使用MFC库之前,您需要了解一些主要概念。

首先是对话框,它是一个用于显示和与用户交互的窗口。

其次是框架窗口,用于包含和管理窗口的集合。

控件是用于接收和显示用户输入的界面元素,如按钮、文本框等。

消息是在窗口间传递的信息,用于处理用户输入和应用程序的操作。

第四部分:使用MFC库创建控件和处理消息(400字)步骤1:在资源视图中选择对应的对话框或窗口。

步骤2:在工具箱中选择所需的控件,并将其拖放到对话框或窗口上。

步骤3:在类视图中选择对应的对话框或窗口类。

步骤4:在类向导中选择“消息映射”选项,并添加所需的消息处理函数。

步骤5:在消息处理函数中编写代码来处理控件的事件或用户输入。

MFC文档视图

MFC文档视图
GetTitle() IsModified() SetModifiedFlags()
获得文档的文件名和路径,若文档未命名则返回空字符串
获得文档的标题,若文档未命名则返回空字符串 若文档未保存数据,则返回非0,否则返回0 设置或清除文档的修改标志,如果设置了修改标记,则系统自动实现关闭文档时,提示用户 是否保存对文档的修改。 文档对应多个视图时,更新所有视图,它是通过调用每个视图类的OnUpdate()函数来更新所 有当前文档关联的视图 当创建一个新文档时由应用程序框架调用(在AppWizard生成的用户程序中已自动重写该函 数)。在派生类中重定义这个函数可以实现在新文档创建之前初始化文档对象,例如为指针 申请内存空间 当从磁盘读入文档时由应用程序框架调用。在派生类中重写这个函数可以实现在新文档读入 之前初始化文档的其他非序列化数据成员 由应用程序框架调用,以删除文档内容。在派生类中重写这个函数可以实现在文档关闭之前 释放文档所占用的内存和资源 由应用程序框架调用(已自动重写)对文档进行串行化(详见后面章节),重写这个函数可 以实现特定的保存或读入文档数据
在程序的任何位置,调用全局函数AfxGetApp()可以获得CWinApp应用程 序类指针,而通过AfxGetApp()->m_pMainWnd则可以获得框架窗口指针
应用程序对象
- 10 -
文档/视图框架—文档视图对象的创建过程
...... //注册应用程序的文档模板。 //文档模板将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CMytestDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_CLASS(CMytestView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); //分析标准外壳命令、DDE、打开文件操作的命令行 ...... //根据命令行中的信息启动程序 ......

MFC入门教程doc

MFC入门教程doc

MFC入门教程doc*************************visualc++/mfc入门教程闻怡洋1.2理解windows消息机制1.3利用visualc++/mfc研发windows程序的优势1.4利用mfc展开研发的通用型方法了解1.5mfc中常用类、宏、函数了解第二章图形输入2.1和gui有关的各种对象2.2在窗口中输出文字2.3采用点、刷子、笔展开绘图2.4在窗口中绘制设备相关位图、图标、设备无关位图2.5使用各种映射方式2.6多边形和剪贴区域第三章文档视结构3.1文档视图框架窗口间的关系和消息传送规律3.2接收用户输入3.3采用菜单3.4文档、视、框架之间相互作用3.5利用序列化进行文件读写3.6mfc中所提供更多的各种视类了解第四章窗口控件4.1button4.2staticbox4.3editbox4.4scrollbar4.cdialogbar4.d利用appwizard建立并采用toolbarstatusbardialogbar4.egeneralwindow4.f关于wm_notify的使用方法第五章对话框5.1采用资源编辑器编辑对话框5.2建立存有模式对话框5.3创建无模式对话框5.45.55.65.7在对话框中展开消息态射在对话框中进行数据交换和数据检查使用属性对话框使用通用对话框5.8创建以对话框为基础的应用领域5.9采用对话框做为子窗口第六章网络通信研发6.1winsock了解6.2利用winsock进行无连接的通信6.3利用winsock建立有连接的通信第一章vc入门1.1如何学好vc这个问题很多朋友都反问过我,当然流汗就是必须的,但同时如果按照某种思路展开存有计划的自学就可以起著更好的效果。

万事开头难,为了协助朋友们更快的掌控vc研发,下面我将自己的一点体会谈一下:1、需要有好的c/c++基础。

正所谓“磨刀不误砍柴工”,最开始接触vc时不要急于开始windows程序开发,而是应该进行一些字符界面程序的编写。

MFC学习笔记----文档类

MFC学习笔记----文档类

文档类1 文档类相关对数据的管理CDocument-父类是CCmdTarget类,提供文档数据的管理2 文档类的使用2.1 创建过程2.1.1 调用CFrameWnd的LoadFrame函数,调用Create函数创建Frame窗口2.1.2 在Frame的OnCreate函数中,先动态创建视图对象,在根据对象动态的创建View(视图)窗口2.1.3 在View的OnCreate函数中,将View的地址保存到Document(文档)中,将Document的地址保存到View中例://文档类class CMyDocument:public CDocument{DECLARE_DYNCREATE(CMyDocument)//动态创建声明宏public:CMyDocument();CString m_strData;//保存文档中数据的成员};IMPLEMENT_DYNCREATE(CMyDocument,CDocument)//动态创建实现宏//视图类class CDocView:public CEditView{DECLARE_DYNCREATE(CDocView)//动态创建声明宏public:virtual void OnInitialUpdate();//CView中的OnInitialUpdate()虚函数};IMPLEMENT_DYNCREATE(CDocView,CEditView)//动态创建实现宏// OnInitialUpdate()虚函数的重写(为了在视图中显示文档中数据)【1】void CDocView::OnInitialUpdate(){//获取文档的指针C MyDocument *pDc=(CMyDocument*)GetDocument();//根据文档指针显示文档中定义好的数据S etWindowText(pDc->m_strData);}//应用程序类class CMainApp:public CWinApp{public:virtual BOOL InitInstance();};//主窗体类class CMainFrame:public CFrameWnd{public:};CMainApp theApp;BOOL CMainApp::InitInstance(){CMainFrame *pFrame=new CMainFrame();CCreateContext context;//定义一个结构体保存构成窗口的视图,文档等信息【2】context.m_pCurrentDoc=new CMyDocument();//动态绑定文档类保存进结构context.m_pNewViewClass=RUNTIME_CLASS(CDocView);//动态绑定视图类保存进结构//调用CFrameWnd::Create函数创建主窗体,在创建消息处理函数中动态的创建了视图//在视图的创建消息处理函数中,将视图和文档的地址相互保存进对方pFrame->LoadFrame(IDR_MENU1,WS_OVERLAPPEDWINDOW,NULL,&context);//让框架通知文档视图更新(视图根据文档中数据更新)pFrame->InitialUpdateFrame(NULL,TRUE);m_pMainWnd=pFrame;m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateData();return TRUE;}相关:【1】OnInitialUpdate视图窗口完全建立后第一个被框架调用的函数。

MFC入门教程范文

MFC入门教程范文

MFC入门教程范文MFC(Microsoft Foundation Class)是微软公司为Windows操作系统开发的一套面向对象的图形用户界面(GUI)应用程序框架。

作为Windows开发的主要框架之一,MFC提供了丰富的类库和工具,可以帮助开发者快速高效地创建Windows应用程序。

本文将介绍MFC的基本概念、开发环境和入门教程,以帮助读者快速上手MFC开发。

一、MFC基本概念1.1MFC的定义和特点MFC是一个面向对象的框架,以C++语言编写,提供了一套丰富的类库和工具,用于开发Windows应用程序。

MFC包含了大量的封装类,可以帮助开发者简化Windows API的调用,提高开发效率。

MFC的优点包括:提供了图形用户界面的开发工具和控件,简化了用户界面的设计和开发;封装了常用的Windows API,提供了更高层次的抽象;提供了方便的数据操作和管理机制,支持数据库访问和数据绑定等功能。

1.2MFC的组成和架构MFC的核心类库包含在afxwin.h头文件中,其中包括了CObject、CWnd、CWinApp等基础类。

MFC的应用程序通常由一个派生自CWinApp类的应用程序对象和一个或多个派生自CWnd类的窗口对象组成。

1.3MFC的开发环境和工具二、MFC开发入门教程2.1创建一个MFC应用程序首先打开Visual Studio,选择File->New->Project。

在弹出的对话框中选择Visual C++->MFC,然后选择MFC Application作为项目类型。

在下一步中,可以选择应用程序的名称、位置和其他选项。

点击Finish按钮即可完成项目的创建。

2.2设计用户界面创建完成后,会自动为我们生成一个基本的窗口界面。

在资源视图中,可以看到应用程序的资源文件,包括窗口的图标、菜单等。

可以使用可视化设计工具对界面进行设计。

例如,可以通过拖拽按钮控件到窗口上,在属性窗口中修改按钮的文字、大小等属性。

VS2010和MFC编程入门之41(文档、视图和框架:分割窗口)

VS2010和MFC编程入门之41(文档、视图和框架:分割窗口)

VS2010MFC编程入门之四十一(文档、视图和框架:分割窗口)理解了文档、视图和框架结构中各对象之间的关系,这里主要讲讲在MFC中如何分割窗口。

分割窗口概述分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图。

MFC分割窗口的方式有两种,动态分割和静态分割。

动态分割窗口通常用于创建同一个文档对应的多个视图,而且这些视图一般都是同一类型的视图,能够在用户编辑文档的不同部分时提供方便。

大家看下Word里的动态分割窗口就很明白了,以Word 2007文档为例,在菜单中点击“视图”->“拆分”,就可以看到一条随鼠标移动的分隔条,当我们在文档中某个位置按下鼠标左键时,分割条就固定了下来,生成了上下两个分割窗格,通过滚动每个窗格中的垂直滚动条可以看到,两个窗格中的内容相同,这就是所说的对应同一个文档的同一类视图。

动态分割窗口最多可以有两行两列。

静态分割窗口比较常见。

我们经常能看到某个软件打开后,界面窗口默认被分割成了几个窗格,这就是静态分割窗口。

静态分割窗口指在窗口创建时,分割的窗格就已经生成了,而且用户不能改变窗格的数量和顺序。

静态分割窗口最多支持16行16列。

通常静态分割窗口的每个窗格中包含不同类的视图,当然也可以是同一类的视图。

CSplitterWnd类MFC中的分割窗口类-CSplitterWnd类提供了分割窗口的功能。

CSplitterWnd类中包含一个分割器窗口,该分割器窗口就是一个包含多个窗格的窗口。

我们分割窗口时就是直接在此分割器窗口中分割的。

鸡啄米下面介绍三个最常用的成员函数:C++代码virtual BOOL Create(CWnd* pParentWnd,intnMaxRows,intnMaxCols,SIZE sizeMin,CCreateContext* pContext,DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT,UINT nID = AFX_IDW_PANE_FIRST);创建动态分割窗口。

第6章--MFC教程

第6章--MFC教程

第6章--MFC教程第6章文档及视图内容:文档、视图、框架、应用四个类的相互作用函数如何添加window消息、菜单消息和鼠标消息捕获消息,限制鼠标的范围,定制鼠标形状,菜单(动态改变菜单)滚动操作、各种坐标第6章文档及视图§6.1文档与视图的关系一、文档/视图结构概述在典型的MFC应用中,文档和视图是成对出现的。

文档/视图的核心部分包括以下四个关键的类。

CDocument类:为文档类提供了基本的功能,用于存储或控制程序中的数据。

CView类:为视图类提供了基本的功能。

视图通常依附于文档,它是文档和用户之间的协调者。

CFrameWnd类:提供了文档中视图的框架窗口。

CDocTemplat或CSingleDocTemplate和CMultiDocTemplate类:协调一个或多个给定类型的文档,并负责创建正确的文档、视图和框架窗口对象。

二、文档模板和文档/视图⑥Window跟踪所有打开的窗口,以便给它们发送消息。

一般情况下,一个框架窗口中只包含一个视图,但在切分窗口中,同样的框架窗口可以包含多个视图指向主框架窗口的指针存储在应用对象的m_pMainWnd成员变量中。

通过一个文档模板来创建的。

框架应用使用了两个文档模板类:用于SDI应用的CSingleDocTemplate类和用于MDI应用的CMultiDocTemplate类。

CSingleDocTemplate模板类一次可以创建和存储一个特定类型的文档;CMultiDocTemplate模板类则可以保存多个已打开的特定类型的文档。

文档模板是由应用对象来创建和维护的。

在应用中的InitIntance函数的关键任务就是创建一个或多个适当的文档模板。

应用对象提供了增加文档模板的接口,系统调用AddDocTemplate函数即可增加文档模板。

当利用File菜单中的New或Open命令创建一个新的文档时,文档模板同时也创建了一个新的框架窗口来查看该文档。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深入分析MFC文档视图结构(项目实践)
1 必备基础知识概述
1.1 MFC文档视图结构程序结构总揽
当我们使用MFC AppWizard生成一个MFC程序,选用所有默认的设置(当然也是Multiple Documents,本文讨论主要基于Multiple Documents,对于Single Document情况仅以简单表述提及,皆因后者和前者很多相似相同之处,但前者更为复杂,并且更加常用。

),假设你的程序名称为A ,则你会得到CMainFrame、CChildFrame、CAboutDlg、CADoc、CAView、CAApp 6个类(Single Document 仅少一个CChildFrame类,其余均同)。

这些类的具体含义将在后面给出,这里先要给出一个MFC 支持文档视图结构程序(以下简称App)的主要组成:
◆一个App(对应类CAApp)可以包含多个文档模版(CDocTemplate),但是MFC AppWizard(无论是SDI还是MDI)都只是默认
生成一个。

但是在实际开发中一个文档模版不够,需要自己手工添加(在后面实际项目例子提供示例)。

这个结构是通过MFC 中CWinApp的成员变量CDocManager* m_pDocManager实现的,我们的CAApp正是继承自MFC提供的CWinApp类。

◆CDocManager类则拥有一个指针链表CPtrList m_templateList来维护这些文档模版。

这些文档模版都是在CAApp::
InitInstance()中通过AddDocTemplate(pDocTemplate)。

◆CDocTemplate拥有3个成员变量,分别保存着Document、View、Frame的CRuntimeClass指针,另外持有成员变量m_nIDResource,
用来指定这个Document显示时候采用的菜单资源。

这4份数据都在CAApp::InitInstance()中CDocTemplate的构造函数中指定。

在Document中拥有一个回指CDocTemplate的指针(m_pDocTemplate)。

◆一个文档可以有多个视图,由Document中成员变量CPtrList m_ViewList维护。

◆CFrameWnd拥有一个成员变量CView* m_pActiveView指向当前活动的View。

◆CView中拥有一个成员变量CDocument* m_pDocument指向该视图相关的Document。

[注解]:①MFC SDI/MDI程序默认都默认生成了一个文档模版,并将这个文档模版Add到其文档模版的链表中,由于这是MFC默认提供的,因此这个文档模版会被插入到文档模版的第一个位置,而MFC也是通过这个文档模版的特定位置可以确定的。

默认情况下,当我们点击File (Open)/ File(New)的时候,这个文档模版会被启用。

除了侯捷先生在《深入浅出MFC中列出的以上的深入分析,我们还应该(很大程度上更加重要)掌握以下的关于MFC SDI/MDI的知识:
◆文档的本质:文档是用来保存数据以及关于数据的处理的,每当MFC SDI/MDI响应File(Open)/ File(New)的时候都会打
开一份文档。

文档可以拥有多个视图。

文档和视图的关系可以这样理解:文档是被视图观察的对象。

◆视图本质:视图在Windows中就是一个窗口,也就是一个可视化的矩形区域。

视图是用来表示文档的数据的。

但是每个视图必
需依附于一个框架(SDI中是MainFrame,MDI是ChildFrame)。

当然你可以自己去Create一个视图,并且去显示它。

◆框架的本质:框架实际是也是一个Windows窗口。

但是在框架上可以放置菜单、工具栏、状态栏等。

而视图则放在框架的客户
区。

因此MFC中我们看到的窗口实际上Frame和View共同作用的结果。

◆在某一时刻,程序中只有一个活动的文档、框架和视图,即当前的文档、框架、视图。

相关文档
最新文档