1、CDockablePane说明
CDockablePane是一个通用窗口容器,它主要有两个用途:在一个框架中悬浮或者停靠窗口。在复杂布局的应用程序中,它可以显示或隐藏所装载的窗口,为应用程序窗口提供额外的空间。
可以将一个窗格停靠在主框架窗口;可以切换窗格自动隐藏模式;可以附加一个窗格到一个选项卡式窗口中;
2、设置CDockablePane最小尺寸
调用CDockablePane::SetMinSize即可设置最小宽度和高度。
3、让Output窗口在下方充满整个窗口
经过的代码的比对,发现哪个先Dock哪个就在对应的方向上充满区域,所以将output窗口先Dock即可,代码如下:
在CMainFrame::OnCreate()中将下面的一句代码添加上即可:
Pane Tab其实也是一个CDockingPane,查看CDockingPane及基类的源码得知,Pane Tab右上角的关闭按钮与AFX_CBRS_CLOSE风格对应,将AFX_CBRS_CLOSE风格去掉即可。继续查看代码,有GetControlBarStyle和SetControlBarStyle函数,所以想法可行,如下所示:
CDockablePane是一个通用窗口容器,它主要有两个用途:在一个框架中悬浮或者停靠窗口。在复杂布局的应用程序中,它可以显示或隐藏所装载的窗口,为应用程序窗口提供额外的空间。
可以将一个窗格停靠在主框架窗口;可以切换窗格自动隐藏模式;可以附加一个窗格到一个选项卡式窗口中;
2、设置CDockablePane最小尺寸
调用CDockablePane::SetMinSize即可设置最小宽度和高度。
3、让Output窗口在下方充满整个窗口
默认情况下生成的SDI窗口中的Output窗口在下方不是充满整个窗口的。要实现如下的充满的效果:
经过的代码的比对,发现哪个先Dock哪个就在对应的方向上充满区域,所以将output窗口先Dock即可,代码如下:
4、屏蔽掉pane右上角的几个按钮
即将 这三个小按钮去掉。
(1) 去掉关闭按钮
在CDockingPane的派生类中,重写下列方法即可:
- virtual BOOL FloatPane(CRect rectFloat, AFX_DOCK_METHOD dockMethod = DM_UNKNOWN, bool bShow = true) { return FALSE; }
- virtual BOOL CanFloat() const { return FALSE; }
- virtual BOOL CanBeClosed() const { return FALSE; }
virtual BOOL FloatPane(CRect rectFloat, AFX_DOCK_METHOD dockMethod = DM_UNKNOWN, bool bShow = true) { return FALSE; }
virtual BOOL CanFloat() const { return FALSE; }
virtual BOOL CanBeClosed() const { return FALSE; }
(2) 去掉自动掩藏按钮
在CMainFrame::OnCreate()中将下面的一句代码注释掉即可:
- //EnableAutoHidePanes(CBRS_ALIGN_ANY);
//EnableAutoHidePanes(CBRS_ALIGN_ANY);
(3) 去掉下拉箭头按钮
在CMainFrame::OnCreate()中将下面的一句代码添加上即可:
- GetDockingManager()->EnableDockSiteMenu(FALSE);
GetDockingManager()->EnableDockSiteMenu(FALSE);
(4) Pane Tab中关闭按钮的去除
Pane Tab其实也是一个CDockingPane,查看CDockingPane及基类的源码得知,Pane Tab右上角的关闭按钮与AFX_CBRS_CLOSE风格对应,将AFX_CBRS_CLOSE风格去掉即可。继续查看代码,有GetControlBarStyle和SetControlBarStyle函数,所以想法可行,如下所示:
- CDockablePane* pTabbedBar = NULL;
- m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
- DWORD dwStyle = pTabbedBar->GetControlBarStyle();
- pTabbedBar->SetControlBarStyle( dwStyle & ~AFX_CBRS_CLOSE); // 去除AFX_CBRS_CLOSE风格
- m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);