MFC 对象之间的关系

为了帮助正确地对待文档/视图创建过程,请考虑正在运行的程序:文档、用于包含视图的框架窗口以及与文档关联的视图。

  • 文档用于保留其视图的列表和指向创建它的文档模板的指针。

  • 视图用于保留指向其文档的指针并且是其父框架窗口的子级。

  • 文档框架窗口用于保留指向其当前活动视图的指针。

  • 文档模板用于保留其打开的文档的列表。

  • 应用程序用于保留其文档模板的列表。

  • 窗口用于跟踪所有打开的窗口以便能将消息发送到这些窗口。

这些关系在文档/视图创建期间建立。 下表显示了正在运行的程序中的对象如何访问其他对象。 任何对象均可通过调用全局函数 AfxGetApp 来获取指向应用程序对象的指针。

获取对应用程序中的其他对象的访问权限

起始对象 如何访问其他对象
文档 使用 GetFirstViewPositionGetNextView 以访问文档的视图列表。

调用 GetDocTemplate 以获取文档模板。
查看 调用 GetDocument 以获取文档。

调用 GetParentFrame 以获取框架窗口。
文档框架窗口 调用 GetActiveView 以获取当前视图。

调用 GetActiveDocument 以获取附加到当前视图的文档。
MDI 框架窗口 调用 MDIGetActive 以获取当前处于活动状态的 CMDIChildWnd

通常,框架窗口包含一个视图,但在某些情况下(例如在拆分窗口中),同一框架窗口包含多个视图。 框架窗口保留指向当前处于活动状态的视图的指针;该指针在其他视图激活时更新。

注意

指向主框架窗口的指针存储在应用程序对象的 m_pMainWnd 成员变量中。 在 CWinAppInitInstance 成员函数的重写中调用 OnFileNew 将为你设置 m_pMainWnd。 如果您未调用 OnFileNew,则必须自行在 InitInstance 中设置变量的值。 (如果 /Embedding 在命令行上,SDI COM 组件[服务器]应用程序就无法设置变量。) 请注意,m_pMainWnd 现在是类 CWinThread 的成员而不是类 CWinApp 的成员

另请参阅

文档模板和文档/视图创建过程
文档模板创建
文档/视图创建
创建新文档、窗口和视图