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