MFC 对象之间的关系
为了帮助正确地对待文档/视图创建过程,请考虑正在运行的程序:文档、用于包含视图的框架窗口以及与文档关联的视图。
文档用于保留其视图的列表和指向创建它的文档模板的指针。
视图用于保留指向其文档的指针并且是其父框架窗口的子级。
文档框架窗口用于保留指向其当前活动视图的指针。
文档模板用于保留其打开的文档的列表。
应用程序用于保留其文档模板的列表。
窗口用于跟踪所有打开的窗口以便能将消息发送到这些窗口。
这些关系在文档/视图创建期间建立。 下表显示了正在运行的程序中的对象如何访问其他对象。 任何对象均可通过调用全局函数 AfxGetApp 来获取指向应用程序对象的指针。
获取对应用程序中的其他对象的访问权限
起始对象 | 如何访问其他对象 |
---|---|
文档 | 使用 GetFirstViewPosition 和 GetNextView 以访问文档的视图列表。 调用 GetDocTemplate 以获取文档模板。 |
查看 | 调用 GetDocument 以获取文档。 调用 GetParentFrame 以获取框架窗口。 |
文档框架窗口 | 调用 GetActiveView 以获取当前视图。 调用 GetActiveDocument 以获取附加到当前视图的文档。 |
MDI 框架窗口 | 调用 MDIGetActive 以获取当前处于活动状态的 CMDIChildWnd。 |
通常,框架窗口包含一个视图,但在某些情况下(例如在拆分窗口中),同一框架窗口包含多个视图。 框架窗口保留指向当前处于活动状态的视图的指针;该指针在其他视图激活时更新。
注意
指向主框架窗口的指针存储在应用程序对象的 m_pMainWnd 成员变量中。 在 CWinApp
的 InitInstance
成员函数的重写中调用 OnFileNew
将为你设置 m_pMainWnd。 如果您未调用 OnFileNew
,则必须自行在 InitInstance
中设置变量的值。 (如果 /Embedding 在命令行上,SDI COM 组件[服务器]应用程序就无法设置变量。) 请注意,m_pMainWnd 现在是类 CWinThread
的成员而不是类 CWinApp
的成员。