欢迎来到天天文库
浏览记录
ID:45030043
大小:4.63 MB
页数:284页
时间:2019-11-08
《VC++深入详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用文档第三章MFC框架剖析3.2基于MFC的程序框架剖析MFCAppWizard帮助我们生成的代码,单击左边工作区窗格中的ClassView(类视图)标签页,可以看到如图的5个类:3.2.1MFC程序中的WinMain函数Win32程序的一个主线:1、进入WinMain函数;2、设计窗口类;3、注册窗口类;4、产生窗口;5、注册窗口;6、显示窗口;7、更新窗口;8、消息循环,将消息路由到窗口过程函数中去处理。1.theApp全局对象在程序入口main函数加载时,系统已经为全局变量或者全局对象分配了存储空间,并为他们赋初值。如何查看变量的值?1、将鼠标移动到该变量上停留片
2、刻,VC++会弹出一个小窗口显示变量的值;2、点击View,在下拉菜单中选择variables即可。为什么要定义一个全局对象theApp,让它在WinMain之前执行?其作用是什么?应用程序的实例是由实例句柄(WinMain函数的参数hInstance)来标识的。对于MFC程序,通过产生一个应用程序类的对象来唯一标识应用程序的实例。每一个MFC仅有一个从应用程序(CWinApp)派生的类。每一个MFC仅有一个该派生类的实例化对象,也就是theApp全局对象。实用文档在一个子类在构造函数前会先调用其父类的构造函数。TheApp对象的构造函数CTestApp在调用之前,会调用
3、其父类CWinApp的构造函数。2.AfxWinMain函数当程序调用了CWinApp类的构造函数,并执行了CTestApp的构造函数,且产生了TheApp对象之后,接下来就是进入了WinMain函数。实际上,WinMain函数是通过.AfxWinMain函数来完成他的功能的。intAFXAPIAfxWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){ASSERT(hPrevInstance==NULL);intnReturnCode=-1;①CWinThread*p
4、Thread=AfxGetThread();CWinApp*pApp=AfxGetApp();//注:实质上上述2个指针是一致的,AfxaGetApp是一个全局函数,定义于AFXWIN1.INL中。//AFXinternalinitializationif(!AfxWinInit(hInstance,hPrevInstance,lpCmdLine,nCmdShow))gotoInitFailure;实用文档//Appglobalinitializations(rare)②if(pApp!=NULL&&!pApp->InitApplication())gotoInitFai
5、lure;//Performspecificinitializations③if(!pThread->InitInstance()){if(pThread->m_pMainWnd!=NULL){TRACE0("Warning:Destroyingnon-NULLm_pMainWnd");pThread->m_pMainWnd->DestroyWindow();}nReturnCode=pThread->ExitInstance();gotoInitFailure;}④nReturnCode=pThread->Run();InitFailure:#ifdef_DEBUG
6、//CheckformissingAfxLockTempMapcallsif(AfxGetModuleThreadState()->m_nTempMapLock!=0){实用文档TRACE1("Warning:Tempmaplockcountnon-zero(%ld).",AfxGetModuleThreadState()->m_nTempMapLock);}AfxLockTempMaps();AfxUnlockTempMaps(-1);#endifAfxWinTerm();returnnReturnCode;}3.InitInstance函数pApp首先调用Init
7、Instance函数,该函数完成MFC内部管理方面的工作,接着,调用PThread的InitInstance函数。在Test程序中,可以发现从CWinApp派生的应用程序类CTestApp也有一个InitInstance函数,其申明如下:virtualBOOLInitInstance();这是一个虚函数,根据多态性原理,AfxWinMain函数这里实际上调用的是子类CTestApp的InitInstance函数。3.2.2MFC框架窗口1.设计和注册窗口窗口类的注册是由AfxEndDeferRegisterClass函数完成。
此文档下载收益归作者所有