深入浅出MFC:MFC的程序的初始化过程
2016-09-27 23:34
344 查看
对于一个标准的MFC的程序,弃去细枝末节,其主要的初始化流程主要如下:
首先是基本类的内容的声明与实现:
这些通常由VS内部自动生成,包含了一些MFC类的基本结构:
其中包含了主要的MFC程序的运转流程,代码如下:
其中主函数main中的内容也一般被自动封装好了,当然这是后话。
运行的消息图是:
接下来基本口述一下这个过程吧,每个MFC程序都会有一个全局的WinApp对象theApp,该App对象实际建立的是我们自己的对象CMyWinApp , 不过由于是全局对象,所以这几个对象被创建的过程都没有被输出,这一个对象被创建后才会有后面的进入主逻辑main,着这个主逻辑中首先是InitApplication方法,之后就是该App对象的InitInstance方法(实例化),创建了一个对象CMyFrameWnd , 该CMyFrameWnd执行其子类CFrameWnd 的Create方法,在该CFrameWnd方法中又调用到了它的子类的CreateEX方法,至此应用程序的加载工作完成,最后则是程序的运行,其中包含了线程的调度,简而言之整个程序就是通过全局对象theApp来展开的,有theApp来负责所有的初始化工作并展开整个程序,这个全局对象是整个MFC程序运转的核心
首先是基本类的内容的声明与实现:
这些通常由VS内部自动生成,包含了一些MFC类的基本结构:
//MFC.h #pragma once //最基础的基本类型的定义 #define BOOL int #define TRUE 1 #define FALSE 0 #include<iostream> using namespace std; class CObject { public: CObject::CObject(){} CObject::~CObject() {} }; class CCmdTarget : public CObject { public: CCmdTarget::CCmdTarget() {} CCmdTarget::~CCmdTarget() {} }; class CWinThread :public CCmdTarget { public: CWinThread::CWinThread() {} CWinThread::~CWinThread() {} virtual BOOL InitInstance(){ cout << "CWinThread::Instance"<<endl; return TRUE; } virtual int Run() { cout << "CWinThread::Run" << endl; return 1; } }; class CWnd; class CWinApp : public CWinThread { public: CWinApp* m_pCurrentWinApp; CWnd* m_pMainWnd; public: CWinApp::CWinApp() { m_pCurrentWinApp = this; } CWinApp::~CWinApp() {} virtual BOOL InitApplication() { cout << "CWinApp::InitApplication"<<endl; return TRUE; } virtual BOOL InitInstance() { cout << "CWinApp::InitInstance" << endl; return TRUE; } virtual int Run() { cout << "CWinApp::Run" << endl; return CWinThread::Run(); } }; class CDocument :public CCmdTarget { public: CDocument::CDocument(){} CDocument::~CDocument(){} }; class CWnd :public CCmdTarget { public: CWnd::CWnd(){} CWnd::~CWnd(){} public: virtual BOOL Create(); BOOL CreateEX(); virtual BOOL PreCreateWindow(); }; class CFrameWnd :public CWnd { public: CFrameWnd::CFrameWnd(){} CFrameWnd::~CFrameWnd(){} public: BOOL Create(); virtual BOOL PreCreateWindow(); }; class CView : public CWnd { public: CView::CView(){} CView::~CView(){} }; //global function CWinApp* AfxGeApp();
//MFC.cpp //该文件编译的时候则依赖MY.h //2个实现文件所依赖的声明项是相同的 #include "MY.h" extern CMyWinApp theApp; BOOL CWnd::Create() { cout << "CWnd::Create" << endl; return TRUE; } BOOL CWnd::CreateEX() { cout << "CWnd::CreateEX" << endl; PreCreateWindow(); return TRUE; } BOOL CWnd::PreCreateWindow() { cout << "CWnd::PreCreateWindow" << endl; return TRUE; } BOOL CFrameWnd::Create() { cout << "CFrameWnd::Create" << endl; CreateEX(); return 0; } BOOL CFrameWnd::PreCreateWindow() { cout << "CFrameWnd::PreCreateWindow" << endl; return 0; } CWinApp * AfxGeApp() { return theApp.m_pCurrentWinApp; }接下来的内容往往由编码者自己编写:
其中包含了主要的MFC程序的运转流程,代码如下:
#pragma once //在这里在MFC.h的基础上多添加了2个类的定义 #include<iostream> #include"MFC.h" using namespace std; class CMyWinApp : public CWinApp { public: CMyWinApp::CMyWinApp(){} CMyWinApp::~CMyWinApp(){} virtual BOOL InitInstance(); }; class CMyFrameWnd : public CFrameWnd { public: CMyFrameWnd(); ~CMyFrameWnd() {}; };
#include"MY.h" CMyWinApp theApp; //全局对象 //最后代码之间的链接由链接器自动完成~~~,不过可以链接的前提是头文件中有对应实现的声明 BOOL CMyWinApp::InitInstance() { cout << "CMyWinApp::InitInstance" << endl; m_pMainWnd = new CMyFrameWnd; return TRUE; } CMyFrameWnd::CMyFrameWnd() { cout << "CMyFrameWnd::CMyFrameWnd" << endl; Create(); } void main() { CWinApp* pApp = AfxGeApp(); pApp->InitApplication(); pApp->InitInstance(); pApp->Run(); system("pause"); }
其中主函数main中的内容也一般被自动封装好了,当然这是后话。
运行的消息图是:
接下来基本口述一下这个过程吧,每个MFC程序都会有一个全局的WinApp对象theApp,该App对象实际建立的是我们自己的对象CMyWinApp , 不过由于是全局对象,所以这几个对象被创建的过程都没有被输出,这一个对象被创建后才会有后面的进入主逻辑main,着这个主逻辑中首先是InitApplication方法,之后就是该App对象的InitInstance方法(实例化),创建了一个对象CMyFrameWnd , 该CMyFrameWnd执行其子类CFrameWnd 的Create方法,在该CFrameWnd方法中又调用到了它的子类的CreateEX方法,至此应用程序的加载工作完成,最后则是程序的运行,其中包含了线程的调度,简而言之整个程序就是通过全局对象theApp来展开的,有theApp来负责所有的初始化工作并展开整个程序,这个全局对象是整个MFC程序运转的核心
相关文章推荐
- MFC程序初始化过程仿真(参考了侯俊杰的《深入浅出MFC》)
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- MFC程序的初始化过程
- MFC程序初始化过程
- MFC初始化过程
- 090910(星期四):MFC程序的初始化
- MFC 六大关键技术之仿真——初始化过程
- MFC程序对win32的封装总结(窗口类的注册,窗口的创建,窗口的窗口过程指定)
- 基于ARM 的嵌入式系统程序开发要点-(二)系统的初始化过程
- VC++中的MFC程序的执行过程
- MFC六大关键技术之(一)—— 初始化过程
- 【转】C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 深入剖析 MFC程序的启动过程
- RCP程序初始化过程
- IDE-----VS2005运行过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的解决
- MFC程序的起动过程分析
- VC++中的MFC程序的执行过程
- 技术资料-【剖析MFC六大关键技术之初始化过程】
- MFC程序的构造过程和运行机理