WEB开发网
开发学院软件开发VC 深入浅出MFC“文档/视图”架构(5)――框架 阅读

深入浅出MFC“文档/视图”架构(5)――框架

 2009-02-11 20:00:28 来源:WEB开发网   
核心提示: (3)CMDIChildWnd类用于在MDI主框架窗口中显示打开的文档,每个视图都有一个对应的子框架窗口,深入浅出MFC“文档/视图”架构(5)――框架(6),子框架窗口包含在主框架窗口中,并使用主框架窗口的菜单,实际上,CFrameWnd、CMDIChildWnd均包含CreateCli

(3)CMDIChildWnd类用于在MDI主框架窗口中显示打开的文档。每个视图都有一个对应的子框架窗口,子框架窗口包含在主框架窗口中,并使用主框架窗口的菜单。

CMDIChildWnd类的一个重要函数GetMDIFrame()返回目前MDI客户窗口的父窗口,其实现如下:

CMDIFrameWnd *CMDIChildWnd::GetMDIFrame()
{
 HWND hWndMDIClient = ::GetParent(m_hWnd);
 CMDIFrameWnd *pMDIFrame;
 pMDIFrame = (CMDIFrameWnd*)CWnd::FromHandle(::GetParent(hWndMDIClient));
 return pMDIFrame;
}
  利用AppWizard生成的名为"example"的MDI工程包含如图5.5所示的类。

深入浅出MFC“文档/视图”架构(5)――框架

图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;
}

上一页  1 2 3 4 5 6 

Tags:深入浅出 MFC 文档

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接