mfc程序框架剖析

mfc程序框架剖析

ID:27781135

大小:90.00 KB

页数:6页

时间:2018-12-06

mfc程序框架剖析_第1页
mfc程序框架剖析_第2页
mfc程序框架剖析_第3页
mfc程序框架剖析_第4页
mfc程序框架剖析_第5页
资源描述:

《mfc程序框架剖析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、MFC程序框架剖析即便是基于MFC的应用程序,建立窗口类也是会遵循如下的过程:设计窗口类->注册窗口类•>生成窗口->显示窗口->更新窗口->消息循环->消息路由到窗口过程函数处理。下面就剖析一下在MFC中是如何完成上述过程的。(1)每个应用程序都有且仅有一个应用类的全局变StheApp,全周变量先于WinMain函数进行处理。(2)WinMain函数体在APPMODUL.CPP文件屮,定义如下:externX"intWINAPI_tWinMain(HINSTANCEhlnstance,HINSTANCEhPrevInstanc

2、e,LPTSTRIpCmdLine,intnCmdShow){//callshared/exportedWinMainreturnAfxWinMainfhlnstance,hPrevInstance,IpCmdLine,nCmdShow);}其屮#define_tWinMainWinMain(3)AfxWinMain函数体在WINMAIN.CPP文件中,里面有如下两句话:CWinThread*pThread=AfxGetThreadf);CWinApp*pApp=AfxGetApp();K实这甩得到的这网个指针都是指向全局的对象

3、theApp的:接下來冇函数调用pThread->lnitlnstance(),报裾多态性,会调用CXXXApp类中的lnitlnstance()函数。该函数很重要,在对该函数的调用中就会完成:设计窗门类->注册窗门类•>生成窗门->显示窗门->更新窗门。接下來,该函数中会继续调用pThread->Run(),这就完成f:消息循环->消总路由到窗n过程函数处理。(4)进入CXXXApp::lnitlnstance()函数体中,对于单文梏应用税序,调川ProcessShellCommand(cmdlnfo),通过调用该函数就会完成

4、:设计窗门类->注册窗门类->生成窗门。再接卜•來就会调川mpMainWnd->ShowWindow(SWSHOW);m_pMainWnd->UpdateWindow();这就完成丫:显示窗门->更新窗门。(5)在函数CWinApp::ProcessShellCommand(CCommandLinelnfo&rCmdlnfo)中会进入到如卜•的case分i:caseCCommandLinelnfo::FileNew:if(!AfxGetApp()->OnCmdMsg(ID_FILE_NEW,0,NULL,NULL))(6)进入函

5、数CCmdTarget::OnCmdMsg(UINTnID,intnCode,void*pExtra:AFX_CMDHANDLERINFO*pHandlerlnfo),调用_AfxDispatchCmdMsg(this,nID,nCode,lpEntry->pfn,pExtra,lpEntry->nSig,pHandlerlnfo);(7)进入函数AFXAPI_AfxDispatchCmdMsg(CCmdTarget*pTarget,UINTnID,intnCode,AFX_PMSGpfn,void*pExtra,UINTnSi

6、g,AFX_CMDHANDLERINFO*pHandlerlnfo),调用caseAfxSig_vv://normalcommandorcontrolnotificationASSERT(CN_COMMAND==0);//CN_COMMANDsameasBN_CLICKEDASSERT(pExtra==NULL);(pTarget->*mmf.pfnCOMMAND)();(1)进入CWinApp::OnFileNew(),调用m_pDocManager->OnFileNew();这个函数很特殊,它木身是个消息响应函数,当我们点击

7、ID为ID_FILE_NEW的菜单时,会产生一个命令消息,由于命令消息可以波CCmdTarget类及其派生类來捕获,而CWinApp足从CCmdTarget派生出來的,因此可以捕获这个消息。当应用程序创建完成并成功显示后,当我们点击文件菜单下的新建菜单项时,就会冇先进入这个函数,然后再依次执行不去,鉍后就会执行到pDocument->OnNewDocument()中,往往我们会对这个函数不解,不知道它为什么会响应ID_FILE_NEW的命令消息,至此典相大白了。顺便说一句,为什么程序在刚抬动的时候,我们并没有点击菜单项,为什么会

8、自动的产生这个消息呢?这足因为在CXXXXApp::lnitlnstance()函数中冇“CCommandLinelnfocmdlnfo;”这个类的构造函数足这样的:CCommandLinelnfo::CCommandLinelnfo(){m_bShowSpla

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。