接上篇, MFC技术系列(四)--Frame窗口(2)
MFC中主要涉及到下面的文件和类:
barcore.cpp (CControlBar)
dockcont.cpp (CDockContext)
bardock.cpp (CDockBar)
winfrm2.cpp (CFrameWnd)
bartool.cpp (CToolBar)
MFC的Frame窗口除了支持Doc-View框架外,还提供了一个重要特性,就是Dock,即:我们可以从CControlBar派生各种Bar,通过CFrameWnd所提供的Dock方法,可以将该Bar Dock到四个方向,或者让其Floating(通过另一个特殊的Frame窗口来支持,后面将会解释)。在MFC提供的默认SDI或者MDI框架代码中,我们能看到类似如下的代码:
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
其中,分别表示起如下作用:
1. 让该tool bar可以dock到任何边
2. 初始化Frame窗口的四个dock bar
3. 将tool bar和dock bar关联起来(做为dock bar的子窗口)
实际上,CFrameWnd提供的Dock功能是由其内部的四个Dock bar所提供的(分别对应四个边)。
1.1 CControlBar类
先说说CControlBar类,它的定义位于afxext.h中,实现位于barcore.cpp中。在MFC中说到Bar,一般都是指继承该类而来。既然CControlBar是依赖于CFrameWnd,它的m_pDockSite方法即用来保存其所在的Frame窗口对象的指针&#