Virtual C++ 学习历程:文档/视图的创建

文档、视图、框架的创建是由文档模板创建的。文档模板负责管理文档、视图和框架。当用户创建一个文档/视图结构的应用程序时,在应用程序的Instance方法中会发现如下代码

CSingleDocTemplate* pDocTemplate;
 pDocTemplate = new CSingleDocTemplate(
  IDR_MAINFRAME,
  RUNTIME_CLASS(CCMyviewDoc),
  RUNTIME_CLASS(CMainFrame),       // main SDI frame window
  RUNTIME_CLASS(CCMyviewView));
 AddDocTemplate(pDocTemplate);

这里的程序首先定义了一个文档模板的指针pDocTemplate,然后调用构造函数在堆上创建实例。CSingleDocTemplate的构造函数主要是调用了基类的CDocTemplate初始化内部的数据成员m_pDocClass,pFrameClass,pViewClass,nIDResource.

在应用程序的InitInstance方法中,当文档模板创建后,调用AddDocTemplate将文档模板添加到文档管理器(CDocManager)当中。CWinApp提供了一个文档管理器的指针m_pDocManager,应用程序就是通过该指针将文档模板添加到文档管理器当中的。

代码部分如下:

void AddDocTemplate(CDocTemplate* pTemplate)
{
 if(m_pDocManager == NULL)
  m_pDocManager = new CDocManager;
 m_pDocManager->AddDocTemplate(pTemplate);
}

文档管理器的AddDocTemplate方法,是在CDocManageemper中定义了一个文档模板列表m_templateList,一个静态的文档模板指针pStaticList.当AddDocTemplate方法传递的文档模板为空时,会将静态文档模板指针中的模板添加到m_templateList中,如果文档模板不为空,将该模板添加到m_templateList的末尾。

文档的创建:

在应用程序的InitInstance方法中有下面几行代码

CCommandLineInfo cmdInfo;
 ParseCommandLine(cmdInfo);

 // Dispatch commands specified on the command line
 if (!ProcessShellCommand(cmdInfo))
  return FALSE;

其中,应用程序CWinApp的ProcessShellCommand方法用于处理命令行。

由于命令行类CCommandLineInfo的默认构造函数将m_nShellCommand初始化为FileNew,所以将执行一下代码

switci()

{

case CCommandLineInfo::FileNew:

 if(!AfxGetApp()->OnCmdMsg(ID_FILE_NEW,0,NULL,NULL)) OnFileNew();

......................

}

默认情况下,应用程序对象在消息映射部分处理了ID_FILE_NEW消息,代码如下:

BEGIN_MESSAGE_MAP(CCMyviewApp, CWinApp)
 //{{AFX_MSG_MAP(CCMyviewApp)
 ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  // NOTE - the ClassWizard will add and remove mapping macros here.
  //    DO NOT EDIT what you see in these blocks of generated code!
 //}}AFX_MSG_MAP
 // Standard file based document commands
 ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
 ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
 // Standard print setup command
 ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

因此,会调用应用程序

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值