`
sabolasi
  • 浏览: 909716 次
文章分类
社区版块
存档分类
最新评论

Windows编程之MFC向导程序框架

 
阅读更多

1.使用MFC AppWizard生成一个单文档应用程序框架。

(1)启动Visual Studio 6.0

(2) 文件->新建->项目->MFC AppWizardexe)->输入项目名称MySDI

(3) Step1,选择Single Document

(4) Step2~6,选择默认。

(5) F7Build MySDI.exe即可运行。

2MFC程序框架解析

1MFC AppWizard生成的工程框架如下图所示。

(2)让我们通过项目自述文件Readme.txt来看一看MySDI项目生成的文件类型及功能结构。

<1>框架窗口类实现文件

MainFrm.h, MainFrm.cpp

These files contain the frame class CMainFrame, which is derived from

CFrameWnd and controls all SDI frame features.

MainFrm.hMainFrm.cpp 为框架窗口类实现文件

该组文件包含了窗口类CMainFrame的实现代码,它主要负责创建标题栏、菜单栏、工具栏和状态栏。它实现的窗口为应用程序的主窗口。

<2>文档类实现文件

MySDIDoc.h, MySDIDoc.cpp - the document

These files contain your CMySDIDoc class. Edit these files to

add your special document data and to implement file saving and loading

(via CMySDIDoc::Serialize).

MFCFrameDoc.hMFCFrameDoc.cpp为文档类实现文件

它主要负责应用程序数据的保存和装载,实现文档的序列化功能。在多文档程序中,当用户执行File菜单中的New时,MFC应用程序框架会调用OnNewDocument()来新建文档。Serialize函数负责文档数据的磁盘读写操作。

<3>视图实现文件

MySDIView.h, MySDIView.cpp - the view of the document

These files contain your CMySDIView class.

CMySDIView objects are used to view CMySDIDoc objects.

MySDIView.h, MySDIView.cpp为视图类实现文件

它主要负责客户区文档数据的显示,以及如何进行人机交互。视图对象是用来显示文档对象的内容的,函数GetDocument()用于获取当前文档对象的指针m_pDocument. 另外一个很重要的函数OnDraw负责将文档对象的数据显示输出到用户视图区。

<4>应用程序类实现文件

MySDI.h

This is the main header file for the application. It includes other

project specific headers (including Resource.h) and declares the

CMySDIApp application class.

MySDI.cpp

This is the main application source file that contains the application

class CMySDIApp.

MySDI.hMySDI.cpp为应用程序类实现文件。

该组文件是应用程序的主函数文件,MFC应用程序的初始化、启动运行和结束都是由应用程序对象完成。

<5>资源头文件

Resource.h

This is the standard header file, which defines new resource IDs.

Microsoft Visual C++ reads and updates this file.

Resource.h为资源头文件

在项目中,资源通过资源标识符加以区别,通常将一个项目中所有的资源标识符放在头文件Resourde.h中定义。

<6>应用程序生成的资源文件

[1].资源文件

向导为项目Mysdi生成了资源文件MySDI.rcMySDI.rc2MySDI.rcVisual C++生成的脚本文件,它使用标准的Windows资源定义语句,可通过资源编译器转换为二进制资源。一般利用资源编辑器对资源进行可视化编辑,也可通过Open命令以文本方式打开一个资源文件进行编辑。MySDI.rc2文件一般用于定义资源编辑器不能编辑的资源。

[2].图标文件

向导为项目Mysdi生成了应用程序的图标文件MySDI.ico。在Visual C++中,可利用图形编辑器编辑应用程序的图标。

[3].文档图标文件

向导为项目Mysdi生成了文档图标文件MySDIDoc.ico。文档图标一般用于多文档应用程序中,在程序MySDI中没有显示这个图标,但编程时用户可以利用相关函数来获取该图标资源并显示图标(IDIDR_MYSDITYPE)。

[4].工具栏按钮位图文件

向导为项目MySDI生成了工具栏按钮的位图文件Toolbar.bmp,该位图是应用程序工具栏中所有按钮的图形表示。

<7>标准包含头文件

StdAfx.h, StdAfx.cpp

These files are used to build a precompiled header (PCH) file

named MySDI.pch and a precompiled types file named StdAfx.obj.

stdafx.hstdafx.cppstdafxStandard Application Framework Xstdafx.h为标准包含文件, stdafx.hstdafx.cpp用来生成预编译文件。其机制如下:

WindowsMFCinclude文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。 为避免这种浪费,AppWizardVisualC++编译程序一起进行工作,如下所示:
AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFCinclude文件。且这一文件可以随被选择的选项而变化。
AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
◎然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp
◎当VisualC++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。(扩展名pch表示预编译头文件。)
◎当VisualC++编译随后的每个.cpp文件时(你可以打开下面的4.CPP文件看到都#include<stdafx.h>),它阅读并使用它刚生成的.pch文件。VisualC++不再分析Windows include文件,除非你又编缉了stdafx.cppstdafx.h

3MFC的框架视图文档的关联

以下代码摘自BOOL CMySDIApp::InitInstance()// CMySDIApp initialization

// 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(CMySDIDoc),

RUNTIME_CLASS(CMainFrame), // main SDI frame window

RUNTIME_CLASS(CMySDIView));

AddDocTemplate(pDocTemplate);

文档模版类CdocTemplate的构造函数如下:

CDocTemplate(UINT nIDResource,CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass,CRuntimeClass* pViewClass);

文档模板对象创建后,调用CWinApp::AddDocTemplate来注册文档模板对象,用于链接文档、框架窗口和视图。

RUNTIME_CLASS(class_name)

返回参数class_name所指定类的静态成员变量class##class_name的指针,该指针指向一个CRuntimeClass结构。

运行时类型识别RTTIRun Time Type Information)是指在程序运行时允许确定对象的类型。MFC扩充了一般C++中运行时类型识别的功能,当一个类支持MFC的运行时类型识别时,它允许程序获取对象的信息(如类名、所占存储空间大小及版本号等)和基类信息。关于运行时动态类型识别和动态创建请参考有关书籍。

4MFC应用程序对象之间的关系

参考:

Windows程序设计》王艳平&张铮

VC++深入详解》 孙鑫

《跟我学Visual C++ 6 [Visual C++ 6 Programming Blue Book]Stephen D.Gilbert

《深入浅出MFC 侯捷

分享到:
评论

相关推荐

    MFC Windows程序设计(第2版修订版)--源代码

     像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与...

    MFC 编程入门教程55篇完整版.pdf

    VS2010/MFC 编程入门之二(利用MFC 向导生成单文档应用程序框架) VS2010/MFC 编程入门之三(VS2010 应用程序工程中文件的组成结构) VS2010/MFC 编程入门之四(MFC 应用程序框架分析) VS2010/MFC 编程入门之五...

    MFC的程序框架剖析

    同理对于ID为ID_FILE_OPEN(在CWinApp::OnFileOpen()中响应)、ID_FILE_SAVE(在CDocument::OnFileSave()中响应)等等在MFC向导为我们生成的单文档类中找不到消息响应的入口时,其实都是在基类CWinApp或者CDocument...

    鸡啄米:VS2010-MFC编程入门教程(1-55).docx

    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架) VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构) VS2010/MFC编程入门之四(MFC应用程序框架分析) VS2010/MFC编程入门之五(MFC...

    VS2010-MFC编程入门

    VS2010-MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 VS2010-MFC编程入门之三(VS2010应用程序工程中文件的组成结构)鸡啄米 VS2010-MFC编程入门之四(MFC应用程序框架分析)-软件开发-鸡...

    MFC Windows程序设计(第2版修订版)--详细书签版2卷

     像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与...

    MFC Windows程序设计(第2版修订版)--详细书签版1卷

     像我的许多同行一样,我学习Windows编程是从读Petzold的书《Windows程序设计》——一本所有Windows程序员都使用的Windows编程圣经——开始的。在刚刚成为一名MFC程序员时,那天我冲进书店,想买一本能够与...

    《Windows网络编程技术》高清PDF版+随书源码

    高级网络编程6.1 简单MFC网络编程6.1.1 网络聊天应用实例6.1.2 MFC基本框架与接口6.1.3 网络应用实例的实现6.2 基于MFC Socket类编程6.2.1 CAsyncSocket类和CSocket类6.2.2 网络应用实例功能介绍6.2.3 网络应用实例...

    MFC基础教程.docx

    2.1 创建基于对话框的MFC应用程序框架 41 2.2 对话框应用程序框架介绍 42 2.3 模态对话框 43 2.4 非模态对话框 47 2.5 总结 48 3 常用控件 49 3.1 静态文本框CStatic 49 3.2 普通按钮CButton 51 3.3 编辑CEdit 53 ...

    盛荣应用程序框架1.62

    9.内置《盛荣应用程序框架》向导,可以生成MFC ATL WTL等项目应用程序。 10.据有自动保存窗口坐标等功能。 主框架: 一个应用程序可以拥有多个主框架。每一个主框架可以是单文档、单文档分格窗口、多文档、多文档分...

    Windows编程循序渐进(清晰完整版)part2

    第三篇 Windows系统程序设计篇 第12章 进程与线程 第13章 内存管理 第14章 进程间通信 第15章 线程同步 第16章 动态链接库 第17章 结构化异常处理 第18章 可执行文件格式 第19章 模块注入与函数挂接技术

    MFC程序员的WTL编程

    当然,如果你也象我一样不希望自己的程序仅仅因为使用了MFC的框架就增加几百K的大小的话,WTL就是你的选择。当然,我们还要克服一些障碍: ATL样式的模板类初看起来有点怪异 没有类向导的支持,所以要手工处理所有...

    MFC程序的界面设计.doc

    实验一 MFC程序的界面设计 一、实验目的和要求 1、熟悉Visual C++编程环境。 2、掌握常用客户区鼠标消息的用法。 二、实验内容 编程实现下图1.1所示界面,要求: 在客户区点击鼠标左键、右键时弹出消息框显示当前...

    vc.rar_9-12 VC_MFC与网络通信_mfc activex_vc dll_vc 生成 dll 文件

    第3课 讲述MFC AppWizard的原理与MFC程序框架的剖析 6 第4课 第4课 MFC消息映射机制的剖析 讲述如何运用ClassWizard 8 第5课 文本编程 11 第6课 菜单编程 15 第7课 对话框用户界面程序的编写 21 第8课 逃跑按钮的...

    Windows编程技术

    2.1.1 MFC与应用程序框架 21 2.1.2 MFC的组成 21 2.1.3 MFC中的类 22 2.2 MFC程序的特点 23 2.2.1 概述 23 2.2.2 MFC与消息处理 23 2.2.3 运行模式 24 2.3 简单的MFC程序 25 2.3.1 开始之前 25 2.3.2 派生应用程序类...

    盛荣应用程序框架 1.62

    产品特色: 1.全新的软件设计思想,软件功能和软件框架分离。 3.自动化应用程序开发框架,支持二次开发...9.内置《盛荣应用程序框架》向导,可以生成MFC ATL WTL等项目应用程序。 10.据有自动保存窗口坐标等功能。

    深入解析MFC

    应用程序框架与MFC MFC要点之旅 结语 第2章 基本的Windows支持 MFC与C/SDK 基本的MFC应用程序组件 现在,找到WinMain() 一些其他隐藏的信息 MFC对GDI的支持 结语 第3章 MFC中的消息处理 CCmdTarget和消息映射表 ...

    完整VC++教程ppt(含MFC具体应用)

    初学必备:Visual C++开发环境是一个基于Windows 操作系统的可视化、面向对象的集成开发环境(Integrated ...MFC 应用程序框架提供了消息映射功能,所有从CCmdTarget 类派生出来的类都能够拥有自己的消息映射。 ……

    WINDOWS网络编程技术.pdf

    高级网络编程6.1 简单MFC网络编程6.1.1 网络聊天应用实例6.1.2 MFC基本框架与接口6.1.3 网络应用实例的实现6.2 基于MFC Socket类编程6.2.1 CAsyncSocket类和CSocket类6.2.2 网络应用实例功能介绍6.2.3 网络应用实例...

Global site tag (gtag.js) - Google Analytics