在SDI中可以使用 CWnd::GetParentFrame() 得到主框架 。如果希望视图类既能用于SDI也能用于MDI,必须通过应用程序对象来获得主框架窗口中。全局函数 AfxGetApp() 返回的是一个指向应用程序对象的指针,借助这个指针可以得到 CWinAPP类的 m_pMainWnd 数据成员。在MDI应用程序中,AppWinzard 自动生成了对 m_pMainWnd 进行设置。m_pMainWnd 一旦被设置,就可以按如下方式在视图类中得到框架的工具栏:
CMainFrame * pFrame = ( CMainFrame* )AfxGetApp() ->m_pMainWnd;
CToolBar* pToolBar = &pFrame->m_wndToolBar ;
必须把 m_pMainWnd 从 CFrameWnd* 转换到 CMainFrame* ,因为 m_wndToolBar 是派生类的成员。还必须使 m_wndToolBar 为公有成员或使我们的类成为 CMainFrame 的友元类。
还可以用同样方法得到菜单对象、状态栏对象和对话框对象。
在SDI程序中,当视图的 OnCreate () 被调用时,m_pMainWnd 还没有被设置。因此如果希望在 OnCreate() 中能够得到主框架窗口,必须使用 GetParentFrame() 。