您的位置:首页 > 编程语言 > C语言/C++

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()

因此,会调用应用程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐