MFC流程
来源:互联网 发布:javascript中ajax全称 编辑:程序博客网 时间:2024/05/17 08:08
具体参照《vc++深入详解》
先是通过(先进入全局变量)// 唯一的一个 CMFCApplication1App(C+创建的工程+APP) 对象CMFCApplication1ApptheApp;(CWinApp 的唯一派生类)
->
找到父类CWinAppEx
->
找到父类CWinApp(CWinApp的父类是CWinThread)并调用构造函数(MFC封装好D:\VS2013\VC\atlmfc\src\mfc的appcore.cpp)
->
通过pModuleState->m_pCurrentWinApp =this;(this代表创建的程序)将MFC创建的程序与MFC封装好的WimMain(在vs2013中封装了MFC的_tWinMain 函数(D:\VS2013\VC\atlmfc\src\mfc的appmodul.cpp) 关联起来
->
进入_tWinMain函数(D:\VS2013\VC\atlmfc\src\mfc的appmodul.cpp) ,实际_tWinMain 通过AfxWinMain(在D:\VS2013\VC\atlmfc\src\mfc的WinMain.cpp)实现。
->
进入AfxWinMain(在D:\VS2013\VC\atlmfc\src\mfc的WinMain.cpp),CWinThread* pThread = AfxGetThread();//获取CWinThread,CWinApp* pApp = AfxGetApp();//获取CWinAPP(AfxGetThread()的返回结果等于AfxGetApp() 即都是CWinApp(也就是程序的this指针并且this指针指向的是程序的C‘MFCName ’APP(全局变量的地址))),然后调用pApp->InitApplication()(完成MFC内部管理方面工作),pThread->InitInstance(InitInstance 是CMFCApplication1App 的虚函数,pThread 指向CMFCApplication1App ,根据多态类InitInstance 实际上调用的是CMFCApplication1App 的InitInstance)()和nReturnCode = pThread->Run()三个函数完成Win32里的几个步骤:设计窗口类,注册窗口类,创建呢窗口,显示窗口,更新窗口,消息循环以及窗口过程函数
->
有了WinMain函数,就可以注册窗口类:(D:\VS2013\VC\atlmfc\src\mfc的wincore.cpp)
AfxEndDeferRegisterClass完成注册窗口:先是判断窗口类的类型,根据类型赋予相应的类名(类名通过MFC预定义),之后调用AfxRegisterClass函数注册窗口类
->
注册完窗口类之后,经过程序的CMainFrame.cpp的CMainFrame类的
BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs)生成窗口,PreCreateWindow函数可以让程序员在窗口产生前有机会修改窗口外观(如去掉最大化按钮)
->
生成窗口后,就是显示和更新窗口通过APP.cpp文件的pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow();
->
消息循环通过
nReturnCode = pThread->Run();(在D:\VS2013\VC\atlmfc\src\mfc的WinMain.cpp)实现
->
窗口过程函数处理感兴趣的消息,交给一个默认的窗口过程函数wndcls.lpfnWndProc = DefWindowProc;(D:\VS2013\VC\atlmfc\src\mfc的wincore.cpp),但不是所有消息都叫交给默认的窗口过程函数处理,而是采用一种称之为消息映射的机制来处理
阅读全文
0 0
- MFC 流程
- MFC流程
- mfc程序流程
- MFC应用程序调用流程
- MFC应用程序执行流程
- MFC程序消息流程
- MFC 程序执行流程
- MFC 运行流程
- MFC程序执行流程
- MFC框架流程
- MFC程序执行流程
- MFC程序流程
- MFC Paint的流程
- MFC执行流程
- MFC应用程序流程,
- MFC 程序执行流程
- MFC流程走向
- MFC流程解析
- Android数据库高手秘籍(七)——体验LitePal的查询艺术
- 编译Gstreamer遇到的问题 autopoint: not found
- 基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA算法
- 润乾V5填报表 连接ORACLE数据库 日期回填报错
- double类型转换int整型四舍五入简单方法
- MFC流程
- getline c分格和c++风格
- Struts2知识点回顾(七)Struts2常用标签
- GC性能优化-参考手册翻译
- 基于Xfire实现webservice的超时设置
- JVM(4)垃圾回收
- JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿
- 程序:找出两个链表的第一个公共节点及c++中堆栈、队列的基本操作
- 完数