MFC六大关键技术之仿真学习笔记(二)
来源:互联网 发布:青岛网络电视户外运动 编辑:程序博客网 时间:2024/05/16 05:17
上一节简单学习了关于MFC中简单的层次结构,而MFC程序的初始化过程究竟是怎么样的呢,与普通Win32初始化的联系又在哪呢?
Win32程序通过RegisterClass,CreateWindow,ShowWindow,UpdateWindow实现对程序的初始化,下面我们来看对MFC初始化的仿真。
*MFC程序的初始化过程
先上类图:
我们来看main函数:
CMyWinApp theApp;int _tmain(int argc, _TCHAR* argv[]){CWinApp * pApp = AfxGetApp();pApp->InitApplication();pApp->InitInstance();pApp->Run();system("pause");return 0;}(1)首先产生一个CMyWinApp theApp对象。
(2)进入main函数,因为在CWinThread中增加了两个虚函数: InitIstance()和run(),CWinApp中增加了虚函数InitApplication(),虚函数在子类中进行override,实现了类的多态,即main函数CwinApp *pApp中依次调用的函数是:CWinApp::InitApplication(),CMyWinApp::InitInstance(),CWinApp::Run()。
(3)函数进入CWinApp::InitApplication()
(4)函数进入CMyWinApp::InitInstance()
virtual BOOL InitInstance(){std::cout << "CMyWinApp::InitInstance \n";m_pMainWnd = new CMyFrameWnd;return TRUE;}调用CMyFrameWnd的构造函数
CMyFrameWnd(){Create();std::cout << "CMyFrameWnd Constructor \n";}此处根据多态性,调用CFrameWnd::Create() (CFrameWnd覆盖掉了父类CWnd虚函数)
BOOL Create(){std::cout << "CFrameWnd::Create \n";CreateEx();return TRUE;}再调用CWnd::CreateEx()
BOOL CreateEx(){std::cout << "CWnd::CreateEx \n";PreCreateWindow();return TRUE;}此处PreCreateWindow()已被CFrameWnd override,此处调用CFrameWnd::PreCreateWindow();[不得不提这也是虚函数的奇妙所在]
在此完成CFrameWnd的构造函数,继而进行CMyFrameWnd的构造函数。
(5)函数进入CWinApp::Run()
virtual void Run(){std::cout << "CWinApp::Run \n";return CWinThread::Run();}继而调用CWinThread::Run()完成整个过程。
下面是运行结果截图:
我们来回到前面的类图,执行顺序如图下
整个流程如图,不得不说在MFC框架仿真中,虚函数是多么重要。
在以上流程中我们仿真了MFC的初始化过程,但是过程中我们并未见到WinMain()函数,函数消失了吗?其实并不是,我们来看下面。
如果我新建一个MFC程序,只添加以下几行代码:
CMyWinApp theApp;BOOL CMyWinApp::InitInstance(){AfxMessageBox(L"test!");return TRUE;}我们发现程序依然可以 运行,弹窗。的确MFC好像已经将WinMain,消息循环等封装进了CMyWinApp等的构造之中,这也就是后面会探究学习的地方。
0 0
- MFC六大关键技术之仿真学习笔记(二)
- 三、MFC 六大关键技术之仿真 (学习笔记)
- MFC六大关键技术之仿真学习笔记(一)
- MFC六大关键技术之仿真学习笔记(三)
- MFC六大关键技术之仿真学习笔记(四)
- MFC六大关键技术之仿真学习笔记(六)
- MFC六大关键技术之仿真学习笔记(五)
- MFC六大关键技术之仿真学习笔记(七)
- MFC六大关键技术之仿真学习笔记(八)
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建) .
- 深入浅出MFC学习笔记(第三章:MFC六大关键技术之仿真:消息映射)
- 深入浅出MFC学习笔记(第三章:MFC六大关键技术之仿真:命令传递) .
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建)
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建) .
- 深入浅出MFC学习笔记(第三章:MFC六大关键技术之仿真:消息映射)
- 深入浅出MFC学习笔记(第三章:MFC六大关键技术之仿真:命令传递) .
- MFC六大关键技术之仿真(一)
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- UNICODE,GBK,UTF-8区别
- 扬中在逃犯罪人员信息记录查询
- 告别ORM
- android开发实践
- andoirdUI那些事(二)
- MFC六大关键技术之仿真学习笔记(二)
- 关于苹果的xcode和ios升级
- Qt界面显示图片,Qt与opencv的联合运用
- jquery实现百分比进度条
- AFNetworking如何获取完整的error body
- 小SQL干大事。。。不断更新
- Unicode和UTF-8的关系
- java中面向对象的一些小知识点(二)
- 泰兴身份证号码户籍地址信息查询