欢迎来到天天文库
浏览记录
ID:40559363
大小:46.50 KB
页数:9页
时间:2019-08-04
《MFC的内部结构》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.MFC的运行步骤:(这是对于文档视图结构的应用程序的)theApp(theApp())->//应用程序全局对象的构造和内存分配WinMain()->//进入主函数AfxWinMain()->//调用APIInitAplacation()(应用程序的内部管理)->//用于应用程序的内部管理的初始化Initinstance()(theApp)->//初始化应用程序对象应用程序的Initinstance()->//应用程序的初始化(创建和注册窗口类、显示和更新应用程序框架)注册窗口类->AfxEndDeferRegisterClass(
2、)(该函数根据不同的应用程序注册不同的窗口类)->AfxRegisterClass()->CMainFrame::PreCreateWindow()->CFrameWnd::PreCreateWindow()->AfxDeferRegisterClass()(如果没有注册,就注册窗口类;它实际上是AfxEndRegisterClass()的宏)(一般都是在这里注册窗口类,由于文档窗口涉及到文档视图类的管理)->LoadFrame()->//载入框架CFrameWnd::Create()->/CWnd::CreateEx()->//创建
3、应用程序窗口CMainFrame::PreCreateWindow()(实际上该函数是一个虚函数,也就是说如果子类为应用程序定义了该函数,那么它将调用子类的函数,因此,我们可以重载该函数来修改应用程序框架的外观)->//在框架窗口显示之前调用ShowWindow()->UpdateWindow()->//显示和更新消息循环:->CwinThread::Run()->do-while()循环(->PumpMessage()->GetMessage()->TranslateMessage()->DispatchMessage())简单的说
4、就是初始化全局对象进入主函数再进行窗口类的创建和注册并显示,然后进入消息循环。theApp:全局变量或是类对象在程序运行前初始化。即分配内存空间,初始成员。(每一个MFC应用程序都只有一个全局对象theApp对象,我们用该全局对象唯一的表示该应用程序。)下面我们给出这些函数如何跟踪(我的是装在C:盘下的他们都在。。MFCSRC下)WinMain()函数(C:ProgramFilesMicrosoftVisualStudioVC98MFCSRCAPPMODUL.CPP)WinApp(C:ProgramFilesMi
5、crosoftVisualStudioVC98MFCSRCTHRDCORE.CPP)AfxWinMain()(C:ProgramFilesMicrosoftVisualStudioVC98MFCSRCWINMAIN.CPP)intAFXAPIAfxWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){ASSERT(hPrevInstance==NULL);intnReturnCode=-1;CWinThread*
6、pThread=AfxGetThread();CWinApp*pApp=AfxGetApp();//AFXinternalinitializationif(!AfxWinInit(hInstance,hPrevInstance,lpCmdLine,nCmdShow))gotoInitFailure;//Appglobalinitializations(rare)if(pApp!=NULL&&!pApp->InitApplication())//C:ProgramFilesMicrosoftVisualStudioVC98MFC
7、includeAFXWIN.H)gotoInitFailure;//Performspecificinitializationsif(!pThread->InitInstance())//C:ProgramFilesMicrosoftVisualStudioVC98MFCincludeAFXWIN.H){if(pThread->m_pMainWnd!=NULL){TRACE0("Warning:Destroyingnon-NULLm_pMainWnd");pThread->m_pMainWnd->DestroyWi
8、ndow();}nReturnCode=pThread->ExitInstance();gotoInitFailure;}nReturnCode=pThread->Run();InitFailure:#ifdef_DEB
此文档下载收益归作者所有