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),但不是所有消息都叫交给默认的窗口过程函数处理,而是采用一种称之为消息映射的机制来处理



原创粉丝点击