- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MFC单文档视图穷追猛打
目录
第一章找回WinMain函数?2第二章InitApplication()函数?2第三章InitInstance ()函数?3第一节:new CSingleDocTemplate?3第二节:AddDocTemplate(pDocTemplate);?5第三节:ProcessShellCommand(cmdInfo)?5第一段AfxGetApp()-OnCmdMsg(…)?6第二段OnFileNew();?6第四节 :m_pMainWnd-ShowWindow(SW_SHOW); ///显示窗口?8第五节 :m_pMainWnd- UpdateWindow (); ///重画窗口?8第四章pApp-Run函数?8第五章总结?8
? 本文将针对一个单文档来描述MFC的文档/视图结构,他直接打开MFC的源代码进行分析,在分析过程中去掉了无关的部分。所以第一步就是要创建一个称为First得工程,文档类型是单文档,下文将围绕这个工程来讲的。第一章找回WinMain函数首先在VC的安装路径中找到WINMAIN.CPP文件,AfxWinMain函数就是VC编译器的入口,去掉一些不重要的东西后得到如下得程序。int AFXAPI AfxWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow){int nReturnCode = -1;CWinApp* pApp = AfxGetApp(); ///获取应用程序类的指针与文档视图无关。AfxWinInit(hInstance, hPrevInstance,lpCmdLine,nCmdShow); ///与文档视图无关。pApp-InitApplication();? ///初始化应用程序详见下文。pApp-InitInstance();???? ///最重要下面祥述nReturnCode = pApp-Run();///消息循环直到应用程序被关闭。与文档视图无关。AfxWinTerm();????? ///与文档视图无关。return nReturnCode;///整个应用结束。}下面分节讲述。第二章InitApplication()函数在文件Appcore.cpp文件中InitApplication如下:BOOL CWinApp::InitApplication(){?if (CDocManager::pStaticDocManager != NULL)?? ///这段和我们关系不大,暂时不理它?{??if (m_pDocManager == NULL)???m_pDocManager = CDocManager::pStaticDocManager;??CDocManager::pStaticDocManager = NULL;?}
?if (m_pDocManager != NULL)??m_pDocManager-AddDocTemplate(NULL);?else??CDocManager::bStaticInit = FALSE;? /*我们的程序将会执行到这句,表示文档类用动态方式创建,也就是说用RUNTIME_CLASS来创建的(详见下文)。*/?return TRUE;}? 说明:CDocManager类是一个不公开的类,他主要用来管理多文档模板对象的,对于单文档只有一个文档模板这个类不是很重要,但还是用它管理文档模板的;本文只在相关之处作说明。bStaticInit是它的一个静态成员。第三章InitInstance ()函数? 它一般被重载,在First工程中,InitInstance中和文档视图类有关的程序有下面的一些:
?CSingleDocTemplate* pDocTemplate;? ///定义指针?pDocTemplate = new CSingleDocTemplate(??IDR_MAINFRAME,??RUNTIME_CLASS(CFirstDoc),??RUNTIME_CLASS(CMainFrame),??RUNTIME_CLASS(CFirstView));??? ///这条语句的作用见第一段?AddDocTemplate(pDocTemplate);
?CCommandLineInfo cmdInfo;??? ///定义一个对象?ParseCommandLine(cmdInfo);??? ///解析命令行并发送参数,与文档视图无关
?if (!ProcessShellCommand(cm
文档评论(0)