当前位置:文档之家› CDockablePane的使用方法及消除关闭按钮

CDockablePane的使用方法及消除关闭按钮

CDockablePane类可以用来创建停靠栏。

可以将其他控件集成到CDockablePane的派生类中。

本文描述如何将对话框集成到CDockablePane中。

集成其他控件的方式类似。

1、首先创建多文档应用程序,创建一个对话框类CTestDlg。

2、在程序添加一个停靠栏类,名为ControlPanel,其父类为CDockablePane,在该类中添加对话框成员。

需要将对话框的style设置为child。

另外border设置为none的话,得到的界面看上去会更主流一点。

1:class ControlPanel : public CDockablePane
2: {
3: .....
4:public:
5: CTestDlg m_dlg;
6: };
3、在ControlPanel的OnCreate方法中创建并显示对话框。

1:int ControlPanel::OnCreate(LPCREATESTRUCT lpCreateStruct)
2: {
3:if (CDockablePane::OnCreate(lpCreateStruct) == -1)
4:return -1;
5:
6:// TODO: Add your specialized creation code here
7:
8: m_dlg.Create(IDD_DIALOG_TEST,this);
9: m_dlg.ShowWindow(SW_SHOW);
10:return 0;
11: }
4、ControlPanel销毁时,对话框也销毁掉:
1:void ControlPanel::OnDestroy()
2: {
3: CDockablePane::OnDestroy();
4:
5:// TODO: Add your message handler code here
6: m_dlg.DestroyWindow();
7: }
5、ControlPanel尺寸变化、隐藏的时候,对话框也要做相关处理:
1:void ControlPanel::OnSize(UINT nType, int cx, int cy)
2: {
3: CDockablePane::OnSize(nType, cx, cy);
4:
5:// TODO: Add your message handler code here
6:if(m_dlg.GetSafeHwnd())
7: {
8: CRect rct;
9: GetClientRect(rct);
10: m_dlg.MoveWindow(rct);
11: }
12: }
6、在框架类中添加ControlPanel成员:
1:class CMainFrame : public CMDIFrameWndEx
2: {
3: ...
4: ControlPanel m_Panel;
5: ...
6: };
7、在框架类创建时,创建这个ControlPanel对象:
Create函数里面的666是这个停靠栏的ID,这里是随便指定的一个数值,只要不和其他已用资源重复即可,真正应用的时候,以在字符串表中添加一个ID。

1:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
2: {
3: ...
4: m_Panel.Create(_T("tset"),this,CRect(0,0,300,300),TRUE,666,
5: WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI);
6: m_Panel.EnableDocking(CBRS_ALIGN_ANY);
7:
8: EnableDocking(CBRS_ALIGN_ANY);
9: DockPane(&m_Panel);
10: ...
11: }
编译运行后,可以发现框架中添加了一个停靠栏,之前创建的那个对话框嵌入在里面。

如何去掉CDockablePane的Close按钮
方法一:
在继承CDockablePane的类中重写CanBeClosed()方法:
virtual BOOL CanBeClosed() const;
...
BOOL COutputWnd::CanBeClosed() const
{
return FALSE;
}
方法二:
if (!m_wndView.Create(strFileView, this, CRect(0, 0, 250, 200), TRUE,
ID_VIEW_VIEW,
WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_HIDE_INPLACE | WS_CAPTION, AFX_CBRS_REGULAR_TABS, AFX_CBRS_RESIZE))
在Create的时候后面加上这样的参数设置AFX_CBRS_REGULAR_TABS,
AFX_CBRS_RESIZE 就不会有那个关闭按钮了
////方法二比较实用。

相关主题