[MFC]MFC程序结构(一)

MFC类库相关的头文件

  • stdafx.h:不是类库的头文件,可以称为项目的头文件,在其中包含了一些MFC标准头文件(如:windows.h,afxwin.h),预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果(生成projectname.pch)。这样可以加快编译速度,节省时间。
  • Afxwin.hMFC核心组件和标准组件
  • Afxext.hMFC扩展
  • Afxcmn.hMFC对Windows 公共控件的支持
  • Afxdisp.hMFC自动化类
  • Afxdtctl.hMFCInternet Explorer 4 公共控件的支持

MFC相关类的说明

 

 

对象类CObject

MFC类库中绝大部分类的父类。提供了MFC类库的一些基本的机制。包括对运行时类信息,动态创建和串行化的支持

应用程序类CWinApp

封装应用程序,线程等信息。是应用程序开始创建的第一个对象(theApp),并且是结束前最后一个执行的对象。启动时,应用程序类负责创建程序的其它对象,在InitInstance()函数中完成。

文档模板类 CDocTemplate

两个子类CSingleDocTemplateCMultiDocTemplate

文档类CDocument

封装数据的管理

框架窗口类 Frame Windows

封装了窗口程序组成的各种框架

对话框类Dialog Boxes

封装了各种对话框,通用对话框等

视图类Views

封装了各种显示窗口

控件类Controls

封装了各种常用的控件

异常类 Exceptions

封装了MFC各种常见的异常

文件类File Service

封装了各种文件的I/O操作

绘图类 CDC/CGdiObject

封装了绘图DC/API/绘图对象

数据支持 ODBC/DAO

数据集合类 CArray/CList/CMap

以上都是CObject的子类

CObject类的子类

提供了各种数据结构相关的管理

 

MFC应用程序类型

应用程序

对话框程序

① CWinApp-应用程序类

② CDialog-对话框窗口类   注:①和②导出的项目是相同的

单文档视图程序

① CWinApp-应用程序类

② CFrameWnd-框架窗口类

③ CView-视图窗口类

④ CDocument-文档类 

多文档视图程序

① CWinApp-应用程序类

② CMDIFrameWnd-多文档主框架窗口类

③ CMDIChildWnd-多文档子框架窗口类

④ CView-视图窗口类

⑤ CDocument-文档类    

MFC库程序

支持MFC的静态库

MFC的动态库

① 静态链接MFC

② 动态链接MFC

③ MFC扩展库  

支持MFC的控制台程序

  官网有详细介绍

MFC程序启动过程

  1.0 程序启动,CXXApp中的全局变量定义:CXXApp theApp,调用CWinApp()构造函数(将theApp对象的地址分别保存到线程状态信息和模块状态信息中);调用CXXApp()构造函数
  1.1 进入WinMain函数,调用AfxWinMain(_tWinMain为宏,值为WinMain)
  1.2 AfxWinMain函数的执行
      1.2.1 获取theApp对象的地址
      1.2.2 调用AfxWinInit,初始化MFC库
      1.2.3 调用InitApplication,初始化应用程序数据
      1.2.4 调用InitInstance,在函数中创建并显示窗口
      1.2.5 调用Run进行消息循环处理
      1.2.6 结束MFC库,退出程序

 

涉及到MFC函数的源文件位置根目录

  • CWinApp构造函数: MFC=>SRC=>APPCORE.CPP
  • AfxWinMainMFC=>SRC=>WINMAIN.CPP
  • AfxEndDeferRegisterClass: MFC=>SRC=>APPCORE.CPP
  • CFrameWnd::PreCreateWindow()函数所在文件:MFC=>SRC=>WINFRM.CPP
  • CFrameWnd::Create()函数路径:MFC=>SRC=>WINFRM.CPP
  • CWnd::CreateEx()函数路径:MFC=>SRC=>WINCORE.CPP
  • CWinThread::Run()方法路径:MFC=>SRC=>THRDCORE.CPP

实例:对话框类应用程序

1.新建项目MFCTest-->MFC应用程序-->下一步-->选择基于对话框-->下一步-->下一步-->-下一步->CMFCTestDlg-->完成。

2.做成:

3.在界面中,右击某一控件,添加变量

其会自动生成如下代码

CDlogMFCADlg::CDlogMFCADlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CDlogMFCADlg::IDD, pParent) 
	, m_nX(0)//当在界面给控件添加关联变量时,会自动添加
	, m_nY(0)
	, m_nAnser(0)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CDlogMFCADlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX); //与上面是一起的,当在界面给控件添加关联变量时,会自动添加
	DDX_Text(pDX, IDC_EDIT_X, m_nX); 
	DDX_Text(pDX, IDC_EDIT_Y, m_nY);
	DDX_Text(pDX, IDC_EDIT_ANSSER, m_nAnser);
}
BEGIN_MESSAGE_MAP(CDlogMFCADlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_ADD, &CDlogMFCADlg::OnBnClickedButtonAdd)//当双击界面按钮时,会自动添加
	ON_BN_CLICKED(IDC_BUTTON_MINUS, &CDlogMFCADlg::OnBnClickedButtonMinus)
	ON_BN_CLICKED(IDC_BUTTON_OK, &CDlogMFCADlg::OnBnClickedButtonOk)
END_MESSAGE_MAP()


4.双击控件,添加逻辑处理

void CDlogMFCADlg::OnBnClickedButtonAdd()
{
	UpdateData(TRUE);
	m_nAnser=m_nX+m_nY;
	UpdateData(FALSE);
}
void CDlogMFCADlg::OnBnClickedButtonMinus()
{ 
	UpdateData(TRUE);
	m_nAnser=m_nX-m_nY;
	UpdateData(FALSE);
}
void CDlogMFCADlg::OnBnClickedButtonOk()
{ 
	CDialogEx::OnOK();
}

5.其结果会有

其实,我们做的工作并不多,大部分流程都是系统框架给做了,这样有主要把精力放在实际的业务逻辑上。不过要熟悉其MFC的程序执行流程和框架。

网上系列教程

你可能感兴趣的:(MFC基础)