MFC标准SDI程序启动详解

需积分: 9 4 下载量 34 浏览量 更新于2024-09-19 收藏 43KB DOC 举报
"这篇内容是关于MFC框架下标准单文档界面(SDI)程序的启动过程的总结,主要涉及CWinApp、CSingleDocTemplate、CMyApp、CMyDoc、CMainFrame、CMyView等类的交互以及命令处理流程。" 在MFC(Microsoft Foundation Classes)库中,开发SDI程序时,程序启动过程遵循一系列规范步骤,以下是详细的解释: 1. **程序加载**:当SDI程序启动时,操作系统(Windows)会传递一个包含特定命令的命令行参数,如`FileNew`,表明用户希望打开一个新的文档。 2. **创建全局对象**:首先,系统创建全局对象`theApp`,它的类型是自定义的CMyApp类,该类继承自CWinApp。CWinApp是MFC中用于管理应用程序生命周期的核心类。 3. **进入WinMain函数**:这是所有Windows应用程序的入口点,C++程序中的WinMain函数将开始处理操作系统传递的参数。 4. **初始化应用实例**:在WinMain中,通过`theApp`指针调用CWinApp的`InitInstance`虚函数。由于CMyApp继承了CWinApp,因此实际上执行的是CMyApp的`InitInstance`,在此过程中可以进行一些自定义的初始化操作。 5. **创建文档模板**:在`InitInstance`中,创建一个CSingleDocTemplate实例,它包含了文档类(如CMyDoc)、框架窗口类(如CMainFrame)和视图类(如CMyView)的信息。然后,将这个模板对象添加到CWinApp的文档模板链表中,以便后续的文档管理。 6. **处理命令行参数**:接着,程序解析传入的命令行参数,创建一个CCommandLineInfo对象`cmdInfo`,并调用`CWinApp::ProcessShellCommand(cmdInfo)`来处理这些参数。 7. **响应文件新建命令**:在`ProcessShellCommand`函数内部,根据`cmdInfo`的`m_nShellCommand`成员(这里是`FileNew`),决定执行`OnFileNew`函数。这里利用了MFC的消息映射机制,如果命令没有被其他地方处理,则默认执行`OnFileNew`。 8. **创建新文档**:`CWinApp::OnFileNew`调用`m_pDocManager`(CDocManager类型的成员)的`OnFileNew`函数,`m_pDocManager`负责管理应用程序的文档模板列表,是文档和视图之间的桥梁。 9. **创建具体文档**:在`CDocManager::OnFileNew`中,根据之前创建的文档模板,实际创建一个新的文档实例,并可能伴随着框架窗口和视图的创建。至此,用户可以看到一个新的空白文档界面准备就绪。 整个过程展示了MFC如何处理SDI应用程序的启动、命令处理和文档视图架构的建立。每个步骤都是MFC框架为了简化Windows应用程序开发而设计的标准化流程,使得开发者可以专注于业务逻辑,而不必过多关注底层的Windows API调用。