资源描述:
《MFC程序创建源码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、创建窗口过程:1.AfxWinMain(hInstance,hPrevlnstance,IpCmdLine,nCmdShow);//MFC消息入口函数2.AfxWinMain()3・if(IpThread->lnitInstance())线程初始化进去4.pDocTemplate=newCSingleDocTemplate(IDR.MAINFRAME,〃单文档模板,1•菜单名称,2•文档,3框架,4视图RUNTIME_CLASS(CDemoDoc),RUNTIME_CLASS(CMainFrame),//主S
2、DI框架窗口RUNTIME_CLASS(CDemoView));5・CDocTemplate::CDocTemplate进去然后按F11进基类的构造函数6.LoadTemplate();装载文档模板7.voidCDocTemplate::LoadTemplate()跳出逃到了第4步的继续8.现在在BOOLCDemoApp::InitInstance()里面是第4步的继续->if(!ProcessShelICommand(cmdInfo))调度命令,相当于点击word打开默认filenew新建不让nothing
3、====F1进去注册在这里!!9・在CWinApp::ProcessShellCommand(CCommandLineInfo&rCmdlnfo)里面找至Uif(!AfxGetApp()->OnCmdMsg(ID_FILE_NEW,0,NULL,NULL))这句话是发送一条消息,这条消息最终调用了OnFileNew();10.voidCWinApp::OnFileNew()—>m_pDocManager->OnFileNew();进去11.voidCDocManager::OnFileNew()12.pTem
4、plate->OpenDocumentFile(NULL);进去13.CDocument*CSingleDocTemplate::OpenDocumentFile(LPCTSTRIpszPathName,14.pDocument=CreateNewDocumentO;创建了文档!!以后有用10.pFrame=CreateNewFrame(pDocunient,NULL);创建框架进去11.在CDocTemplate::CreateNewFrame(CDocument*pDoc,CFrameWnd*pOther
5、)里面CFrameWnd*pFrame=(CFrameWnd^Jm-pFrameClass-^reateObjectO;创建框架类对象进入构造函数12.CFrameWnd::CFrameWnd()出去CMainFrame::CMainFrame()我们可以确定在16里面创建的是CMainFrame这个对象,然后出去13.在CDocTemplate::Ci*eateNewFrame(里面找到代码,其实是16的继续if(!pFrame->LoadFrame(m_nIDResource,WS_OVERLAPPEDW
6、INDOW
7、FWS_ADDTOTITLE,NULL,&context))进去14.BOOLCFrameWnd::LoadFrame(UINTnIDResource,DWORDdwDefaultStyle,CWnd*pParentWnd,CCreateContext*pContext)15.LPCTSTRIpszCIass=GetIconWndClass(dwDefaultStyle,nIDResource);进去作用:在这个函数里面注册了窗口类,然后把窗口类的名称返回16.HICONhlcon=::Loadl
8、con(hlnst,ATL_MAKEINTRESOURCE(nIDResource));加载图标17.PreCreateWindow(cs);因为这个方法是个虚函数,所以我们得根据this是谁才能判断调用的是哪个函数现在的this是CMainFrame18.BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs)将来我们可以在这个函数里面设置窗口类的属性很重要!!!19.BOOLCFrameWnd::PreCreateWindow(CREATESTRUCT&cs)在这个
9、函数里面设置了默认的样式,然后跳出,然后跳出,回到了第20步的继续20.在LPCTSTRCFrameWnd::GetIconWndClass(DWORDdwDefaultStyle,里面有代码->WNDCLASSwndcls;看这里:AfxCtxGetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndcls)&&判断类是否存在进去找了一遍,没有发现注