MFC -- CMyApp::InitInstance()过程分析

 
  1. BOOL CMyApp::InitInstance()
  2. {
  3.     CSingleDocTemplate* pDocTemplate;
  4.     pDocTemplate = new CSingleDocTemplate( //步骤一
  5.         IDR_MAINFRAME,
  6.         RUNTIME_CLASS(CMyDoc),
  7.         RUNTIME_CLASS(CMainFrame),
  8.         RUNTIME_CLASS(CMyView));
  9.     if (!pDocTemplate)
  10.         return FALSE;
  11.     AddDocTemplate(pDocTemplate);  //步骤二 m_pDocManager->AddDocTemplate(pDocTemplate); 
  12.     
  13.     CCommandLineInfo cmdInfo;
  14.     ParseCommandLine(cmdInfo);    //步骤三 通过void CWinApp::OnFileNew()=>m_pDocManager->OnFileNew();创建Doc、Frame、View
  15. }
  16. //================================分析如下======================================================
  17. //========步骤一=======
  18. RUNTIME_CLASS(CMainFrame)
  19. //展开得==》
  20. (CRuntimeClass*)(&CMainFrame::classCMainFrame)
  21. //从而在
  22. pDocTemplate = new CSingleDocTemplate(
  23.     IDR_MAINFRAME,
  24.     ((CRuntimeClass*)(&CMyDoc::classCMyDoc)),
  25.     ((CRuntimeClass*)(&CMainFrame::classCMainFrame)),
  26.     ((CRuntimeClass*)(&CMyView::classCMyView)));
  27. //通过构造函数初始化了三大关键成员===>
  28. class AFX_NOVTABLE CDocTemplate : public CCmdTarget
  29. {
  30.     CRuntimeClass* m_pDocClass;    //=((CRuntimeClass*)(&CMyDoc::classCMyDoc))        // class for creating new documents
  31.     CRuntimeClass* m_pFrameClass;  //=((CRuntimeClass*)(&CMainFrame::classCMainFrame))// class for creating new frames   
  32.     CRuntimeClass* m_pViewClass;   //=((CRuntimeClass*)(&CMyView::classCMyView)))     // class for creating new views    
  33. };
  34. //========步骤二=======
  35. //将文档模板(含三口组)放入到文档模板链表中,并由CDocManager类对象进行管理
  36. //========步骤三=======
  37. //m_pDocManager->OnFileNew()调用CDocTemplate中CFrame/CDocument的创建方法,这里终于用到了“执行期动态创建”
  38.     CFrameWnd* CDocTemplate::CreateNewFrame
  39.     {
  40.         context.m_pNewViewClass = m_pViewClass;
  41.         CDocument* pDocument = (CDocument*)m_pDocClass->CreateObject();
  42.     }
  43.     CDocument* CDocTemplate::CreateNewDocument
  44.     {
  45.         CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject();
  46.     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值