mfc 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库...

53
第 1第 MFC 第第 第第第第第第第第 第第第第第 第第第第第第第 第第第第第 第第第第第 第第 第第第第 第第第第第第第 第第第第第第第 第第第第第第

Upload: thaddeus-chang

Post on 02-Jan-2016

203 views

Category:

Documents


7 download

DESCRIPTION

MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发. 第六讲 MFC 基础. 2014年11月4日星期二. MFC 概述 MFC 类的组织结构 主要类的介绍 MFC 的全局变量以及全局函数 创建第一个 MFC 程序. 6.1 MFC 概述. M icrosoft F oundation C lass 微软基础类. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 1页

MFC 基础标准控件和对话框文档和视图用户界面的改善动态链接库多线程编程多媒体程序开发数据库程序开发注册表程序开发网络程序开发

Page 2: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 2页

第六讲 MFC 基础

April 20, 2023

Page 3: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 3页

MFC概述MFC类的组织结构主要类的介绍MFC的全局变量以及全局函数创建第一个MFC程序

Page 4: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 4页

6.1 MFC6.1 MFC 概述概述

Microsoft Foundation Class

微软基础类

Page 5: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 5页

MFC 是用来编写 Windows 应用程序的 C++ 类集,该类集以层次结构组织起来,其中封装了大部分 Windows API 函数和Windows 控件,它所包含的功能涉及到整个 Windows 操作系统。MFC 不仅为用户提供了 Windows 图形环境下应用程序的框架,而且还提供了创建应用程序的组件。

Page 6: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 6页

MFC 还很好地保持了程序的向下兼容性

是用来编写 Windows 应用程序的 C++类集

以层次结构组织

封装了大部分 API 函数

提供了图形环境下应用程序的框架

提供了创建应用程序的组件

提供了大量的基类供程序员根据不同的应用环境进行扩充

允许在编程过程中自定义和扩展应用程序中的类

较好的移植性,可移植于众多的平台

MFC

Page 7: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 7页

MFCMFC 的历史(的历史( 11 ))

MFC1.0 & MS C/C++7.0 应用程序中非图形部分的类GUI 功能的 Windows 相关类

MFC2.0 & MS VC++1.0 在 1.0 基础上增添了一些应用程序

MFC3.0 & VC++2.0 增添了对开发 32 位应用程序的支持

MFC2.0 & MS VC++1.5 添加了 ODBC 类,并且还支持 OLE 的性能

MFC4.0包含了在 Win95 和 NT 中大多数新的公共控件和 DAO 、 MAPI

增强了对数据库应用程序的支持利用 DAO 类通过编程语言来访问、操纵和管理数据库对 Internet 也提供了强有力的支持

MFC4.21

Page 8: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 8页

MFCMFC 的历史(的历史( 22 ))

MFC5.0 增强了对数据库和 Internet 的支持Win32 Internet APIActivex控件

MFC6.0 提出了活动文档容器来管理不同类型的文档加入了对动态 HTML 技术的支持扩展了对公共控件的支持

Page 9: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 9页

MFC是放置Windows API的 OOP的包装的 C++类库MFC是一个应用程序的结构框架

Page 10: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 10页

使用使用 C++C++ 和和 MFCMFC 的优点的优点

可重用性数据的封装性MFC将窗口、控件、对话框等变成 C++的对象减少代码的编写,提高软件开发效率

Page 11: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 11页

6.2MFC6.2MFC 类的组织结构类的组织结构

hierarchy chart

Page 12: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 12页

MFCMFC 类的组织结构(类的组织结构( 22 ))

Page 13: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 13页

MFCMFC 库中的类按层次关系划分类库中的类按层次关系划分类

根类: CObject应用程序体系结构类窗口、对话框和控件类绘图和打印类简单数据类型类数组、列表和映射类文件和数据库类Internet 和网络工作类OLE 类调试和异常类

Page 14: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 14页

6.36.3 主要类的介绍- 主要类的介绍- CObjectCObject 类类

MFC 中多数类和用户自定义子类的根类,是抽象基类。它提供了许多编程所需的公共操作。

对象的建立

对象的删除

运行时信息

对象诊断输出

串行化支持 绘图和打印类

输出 ( 设备相关 )类绘图工具类

Page 15: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 15页

应用程序和线程支持类命令相关类文档类文档模板类视类 ( 体系结构 )框架窗口 ( 体系结构 )

应用程序体系结构类

窗口、对话框和控件类

框架窗口类(窗口)视类(窗口)对话框类控件条类

简单数据类型类

数组、列表和映射类数组类列表类映射类

Page 16: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 16页

文件和数据库类文件 I/O 类DAO 类ODBC 类

Internet 和网络工作类LSAPI 类Windows Socket 类Win32 Internet 类

OLE 类

OLE 容器类OLE服务器类OLE拖放和数据传输类OLE普通对话框类OLE 动画类OLE 动画类OLE 控件类活动文档类其他文档类

调试和异常类 调试支持类异常类

Page 17: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 17页

应用程序体系结构类

1.命令相关类

2. 窗口应用程序类

3. 文档 / 视类

4. 线程基类编写程序的任务是填充框架,添加应用程序专用的功能

用于构造应用程序框架的结构,提供多数应用程

序公用的功能

Page 18: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 18页

1.命令相关类: CCmdTarget 类

该类是 CObject 的子类,它是 MFC 库中所有具有消息映射属性的基类。消息映射规定了当一对象接收到消息命令时,应调用哪一个函数对该消息进行处理

2.线程基类: CWinThread 类所有线程的基类,可直接使用。 CWinApp类就是从CWinThread 类中派生出来的

Page 19: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 19页

4.文档 / 视类 文档对象由文档模板对象创建,管理应用程序的数据。视对象表示一个窗口的客户区,显示文档数据并允许用户与之交互。

3.窗口应用程序类: CWinApp类 每个应用程序有且只有一个应用程序对象,在运行程序中该对象与其它对象相互协调,该对象从 CWinApp类中派生出来。 CWinApp类封装了初始化、运行、终止应用程序的代码。

Page 20: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 20页

在 CWinApp 中定义的部分函数的功能有时也可以通过 MFC 提供的全局函数来实现,这些全局函数一般都以 Afx 为前缀。例如调用 AfxMessageBox 函数将弹出一个消息框,

其功能与 CWinApp 中的 DoMessageBox 相同。 AfxMessageBox原型如下:

int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 )

Page 21: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 21页

int int AfxMessageBoxAfxMessageBox(LPCTSTR(LPCTSTR lpszText,UINT nType = MB_OK, UINT nIDHelp = 0 )lpszText,UINT nType = MB_OK, UINT nIDHelp = 0 )

MB_ABORTRETRYIGNORE   

MB_OK

MB_OKCANCEL

MB_RETRYCANCEL 

MB_YESNO  

MB_YESNOCANCEL   

Page 22: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 22页

可视对象类可视对象类

2.视类: CView 类

该类表示框架窗口的客户区和显示文档数据并接收输入的客户区,其派生类主要有如下几种:

CScrollView :具有滚动功能的视的基类CFormView :其布局在对话资源中定义的滚动视CEditView :具有文本编辑、查找、替换和滚动功能的视

1.窗口类: CWnd 类

CWnd 提供了 MFC 中所有窗口类的基本功能,是 CCmdTarget 类的子类

创建 Windows 窗口要分两步进行

引入构造函数,构造一个 CWnd 对象

调用 Create 建立 Windows 窗口,并将它连到 CWnd对象上

Page 23: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 23页

3.菜单类: CMenu类该类是 CObject 类的子类,用于管理菜单。它是一个 Windows HMenu的封装,提供了与窗口有关的菜单资源建立、修改、跟踪及删除的成员函数。

4.对话框类: CDialog类由于对话框是一个特殊的窗口,所以该类是从 CWnd类中派生出来的。对话框子层次结构包括通用对话框类 CDialog以及支持文件选择、颜色选择、字体选择、打印、替换文本的公共对话框子类。

Page 24: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 24页

5.控件类 控件子层次结构包括若干类,使用这些类可建立静态文本、命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。这些直观控件为 Windows 应用程序提供了各种输入和显示界面。

6.控件条类: CControlBar 类 控件条子层次结构为工具条、状态条、对话条和分割窗口建立模型。该类是 CToolBar 、 CStatusBar 、 CDialogBar 的基类,负责管理工具条、状态条、对话条的一些成员函数。控件条指的是连接在主窗口框架的顶部或底部的小窗口

Page 25: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 25页

7.绘画对象类: CGdiObject 类图形绘画对象子层次结构以 CGdiObject 类为根类,可用于建立绘画对象模型,如画笔、刷子、字体、位图、调色板等。

8 .设备描述表类: CDC 类该类及其子类支持设备描述表对象,是 CObject 类的子类。CDC 类是一个较大的类,包括许多成员函数,如映射函数、绘画工具函数、区域函数等,通过 CDC 对象的成员函数可以完成所有的绘画工作

Page 26: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 26页

此类提供了许多通用服务,例如文件 I/O 、诊断和异常处理等,此外还包括如数组和列表等存放数据集的类

1.文件类: CFile 类和 CArchive 类 用以编写输入输出处理函数

2.异常类: CException 类是所有异常情况的基类。不能直接建立CException 对象,只能建立派生类的对象,用派生类来捕获指定的异常情况

3.模板收集类这些类可以将多种对象存放到数组、列表和“ 映射”中。但这些收集类是模板,它们的参数确定了存放在集合中的对象类型。

通用类通用类

Page 27: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 27页

6.4MFC 6.4MFC 中全局函数和全局变量中全局函数和全局变量以 Afx 为前缀的函数 ( 数据库类函数和 DDX

函数除外 ) 和变量,在目前的版本中,都表示全局函数或全局变量。

AfxAbort : 无条件终止一个应用程序AfxBeginThread : 创建一个新线程并执行它AfxEndThread : 终止当前正在执行的线程AfxFormatString : 格式化字符串AfxMessageBox : 显示一个 Windows消息框AfxGetApp : 返回当前应用程序对象的指针AfxGetAppName : 返回应用程序的名称AfxGetMainWnd: 返回指向应用程序主窗口的指针AfxGetInstanceHandle :返回标识当前应用程序对象的句柄AfxRegisterWndClass :注册用于创建 Windows 窗口的窗口类

Page 28: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 28页

6.56.5 创建第一个创建第一个 MFCMFC 程序程序

Page 29: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 29页

Step1Step1

Page 30: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 30页

Step2Step2

Page 31: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 31页

Step3Step3

Page 32: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 32页

Step4Step4

Page 33: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 33页

Step5Step5

Page 34: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 34页

Step6Step6

Page 35: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 35页

Step7Step7

Page 36: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 36页

单文档应用程序创建的类单文档应用程序创建的类

CAboutDlg 对话框类CMyMFCApp 应用程序类CMyMFCDoc 文档类CMyMFCView 视图类CMainFrame 框架类

Page 37: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 37页

应用程序类应用程序类 CMyMFCApp CMyMFCApp

CMyMFCApp theApp;

virtual BOOL InitInstance();

Page 38: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 38页

InitInstance();InitInstance();

是一个虚函数进行应用程序的初始化操作初始化正常,返回 TRUE

初始化失败,返回 FALSE,结束程序m_pMainWnd->ShowWindow(SW_SHOW);

m_pMainWnd->UpdateWindow();

Page 39: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 39页

MyMFC.hMyMFC.h// MyMFC.h : main header file for the MYMFC application//#if !defined(AFX_MYMFC_H__355BF7F0_55F5_4A92_BF4C_E97A6904C503__INCLUDED_)#define AFX_MYMFC_H__355BF7F0_55F5_4A92_BF4C_E97A6904C503__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#ifndef __AFXWIN_H__

#error include 'stdafx.h' before including this file for PCH#endif#include "resource.h" // main symbols/////////////////////////////////////////////////////////////////////////////// CMyMFCApp:// See MyMFC.cpp for the implementation of this class//class CMyMFCApp : public CWinApp{public:

CMyMFCApp();// Overrides

// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyMFCApp)public:virtual BOOL InitInstance();//}}AFX_VIRTUAL

// Implementation//{{AFX_MSG(CMyMFCApp)afx_msg void OnAppAbout();

// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !

//}}AFX_MSGDECLARE_MESSAGE_MAP()

};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MYMFC_H__355BF7F0_55F5_4A92_BF4C_E97A6904C503__INCLUDED_)

Page 40: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 40页

理解程序代码理解程序代码// MyMFC.h : main header file for the MYMFC application//#if !defined(AFX_MYMFC_H__355BF7F0_55F5_4A92_BF4C_E97A6904C503__INCLUDED_)#define AFX_MYMFC_H__355BF7F0_55F5_4A92_BF4C_E97A6904C503__INCLUDED_

#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#ifndef __AFXWIN_H__

#error include 'stdafx.h' before including this file for PCH#endif#include "resource.h" // main symbols...#endif // !defined(AFX_MYMFC_H__355BF7F0_55F5_4A92_BF4C_E97A6904C503__INCLUDED

Page 41: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 41页

条件编译指令条件编译指令

避免一个 .h文件被包含多次#ifndef xxx_h

//... .h文件的内容#define xxx_h

#endif

Page 42: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 42页

域运算符域运算符

::

在MFC程序当中要使用 API,在 API前加 ::

Page 43: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 43页

#pragma once

如果在多个文件中包含了同一个头文件,可以防止多次定义

Page 44: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 44页

类类 CMyMFCAppCMyMFCAppclass CMyMFCApp : public CWinApp{public:

CMyMFCApp();

// Overrides 重写虚函数// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMyMFCApp)public:virtual BOOL InitInstance();//}}AFX_VIRTUAL

// Implementation 消息映射和函数 OnAppAbout()的声明//{{AFX_MSG(CMyMFCApp)afx_msg void OnAppAbout();

// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !

//}}AFX_MSGDECLARE_MESSAGE_MAP()

};

Page 45: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 45页

构造函数构造函数

CMyMFCApp::CMyMFCApp()

{// TODO: add construction code here,

// Place all significant initialization in InitInstance

}

什么事情也没作???

Page 46: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 46页

BOOL BOOL CMyMFCApp::InitInstance()CMyMFCApp::InitInstance()这个函数来完成初始化工作它有返回值AfxEnableControlContainer();使得应用程序包含 ActivX控件SetRegistryKey();注册关键字pDocTemplate;注册单文档模板处理命令行显示更新窗口

Page 47: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 47页

消息映射消息映射BEGIN_MESSAGE_MAP(CMyMFCApp, CWinApp)

//{{AFX_MSG_MAP(CMyMFCApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

// NOTE - the ClassWizard will add and remove mapping macros here.

// DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG_MAP// Standard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

// Standard print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)

END_MESSAGE_MAP()

Page 48: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 48页

这些消息映射表获取来自菜单的命令ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

注意消息映射后面没有“;” ;

ID_APP_ABOUT是一个菜单命令的 ID,单击该菜单选项将调用 OnAppAbout函数void CMyMFCApp::OnAppAbout()

{ CAboutDlg aboutDlg;

aboutDlg.DoModal();}

Page 49: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 49页

一个更简单的一个更简单的 MFCMFC 程序程序//Hello.hclass CMyApp : public CWinApp{public: virtual BOOL InitInstance ();};

class CMainWindow : public CFrameWnd{public: CMainWindow ();

protected: afx_msg void OnPaint (); DECLARE_MESSAGE_MAP ()};

Page 50: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 50页

hello.cpphello.cpp#include <afxwin.h>#include "Hello.h"CMyApp myApp;/////////////////////////////////////////////////////////////////////////// CMyApp member functions

BOOL CMyApp::InitInstance (){ m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE;}/////////////////////////////////////////////////////////////////////////// CMainWindow message map and member functions

BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT ()END_MESSAGE_MAP ()CMainWindow::CMainWindow (){ Create (NULL, _T ("The Hello Application"));}

void CMainWindow::OnPaint (){ CPaintDC dc (this); CRect rect; GetClientRect (&rect);

dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);}

Page 51: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 51页

Page 52: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 52页

Page 53: MFC 基础 标准控件和对话框 文档和视图 用户界面的改善 动态链接库 多线程编程 多媒体程序开发 数据库程序开发 注册表程序开发 网络程序开发

第 53页