Virtual C++ 学习历程:文档/视图的创建
2007-09-08 16:37
609 查看
文档、视图、框架的创建是由文档模板创建的。文档模板负责管理文档、视图和框架。当用户创建一个文档/视图结构的应用程序时,在应用程序的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()
因此,会调用应用程序
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()
因此,会调用应用程序
相关文章推荐
- 关闭 晓K的专栏 我的学习历程 目录视图摘要视图订阅 赠书 | 异步2周年,技术图书免费选 每周荐书:渗透测试、K8s、架构(评论送书) 项目管理+代码托管+文档协作,开发更
- 关闭 晓K的专栏 我的学习历程 目录视图摘要视图订阅 赠书 | 异步2周年,技术图书免费选 每周荐书:渗透测试、K8s、架构(评论送书) 项目管理+代码托管+文档协作,开发更
- django官方文档学习-入门part3创建用户视图
- Java-2-学习历程2:基础知识1,2,3文档、完整版视频资源、电子书籍下载
- oracle9i学习笔记之十 创建视图
- 如何在MFC单文档中创建多视图
- 结合ADO、ADOX和MFC的文档/视图/框架架构创建和打开Access数据库
- Activit最入门学习文档,从如何创建项目开始共20章,看完,任何Java项目集成无压力
- 一步步学习微软InfoPath2010和SP2010--第五章节--添加逻辑和规则到表单(6)--使用规则创建多视图样式向导表单
- 如何创建可扩展表视图中的iOS 学习和拓展优化(有待更新)
- 创建显示特殊文档的视图:$FormulaClass的奥秘
- iPhone开发学习笔记007——Xcode4.2下iPhone多视图开发(自已创建MainWindow.xib和不用MainWindow.xib两种实现)
- Oracle学习历程--创建用户,分配表空间
- mfc学习---文档视图架构
- 430的VS2015单文档MFC学习笔记之创建以及添加按钮
- Python学习笔记(27)-创建与修改excel文档
- TN25 文档,视图和框架之创建
- IOS学习(一)视图创建
- VC文档与视图结构学习总结
- 一步步学习SPD2010--第三章节--处理列表和库(7)----创建XSLT列表视图Web部件