深入浅出MFC“文档/视图”架构(5)――框架
2009-02-11 20:00:28 来源:WEB开发网(3)CMDIChildWnd类用于在MDI主框架窗口中显示打开的文档。每个视图都有一个对应的子框架窗口,子框架窗口包含在主框架窗口中,并使用主框架窗口的菜单。
CMDIChildWnd类的一个重要函数GetMDIFrame()返回目前MDI客户窗口的父窗口,其实现如下:
CMDIFrameWnd *CMDIChildWnd::GetMDIFrame()
利用AppWizard生成的名为"example"的MDI工程包含如图5.5所示的类。
{
HWND hWndMDIClient = ::GetParent(m_hWnd);
CMDIFrameWnd *pMDIFrame;
pMDIFrame = (CMDIFrameWnd*)CWnd::FromHandle(::GetParent(hWndMDIClient));
return pMDIFrame;
}
图5.5 一个MDI工程包含的类
其中的CMainFrame继承自CMDIFrameWnd,CChildFrame类继承自CMDIChildWnd类,CExampleView视图类则负责在CMDIChildWnd类对应的子框架窗口中显示文档的数据。
文中只是对CMDIFrameWnd的CreateClient成员函数进行了介绍,实际上,CFrameWnd、CMDIChildWnd均包含CreateClient成员函数。我们经常通过重载CFrameWnd:: CreateClient、CMDIChildWnd:: CreateClient函数的方法来实现"窗口分割",例如:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs,
CCreateContext *pContext)
{
…
if (!m_wndSplitter.Create(this, 2, 2, // 分割的行、列数
CSize(10, 10), // 最小化尺寸
pContext))
{
TRACE0("创建分割失败");
return FALSE;
}
…
return TRUE;
}
更多精彩
赞助商链接