vs的侧边栏能自动隐藏,改变尺寸,拖动停靠等,挺方便高大上的。本文将介绍如何实现类似的功能:
一、建立mfc单文档工程
二、资源里插入新的对话框,将其属性页外观里Border(边界)改成无,Style(风格)改为child(默认的Popup为弹出)
然后就是做界面,举例如下:。接着为对话框关联一个新类,本文起名为CCebianDlg。
三、为上述对话框添加侧边栏的属性。首先添加一个mfc新类(本文为CCebianBar),该类公有继承CDockablePane
然后为CCebianBar添加对话框的成员变量,.h文件里:
public:
static CCebianDlg ceDlg; //声明静态成员
.cpp文件里:
// CCebianBar
CCebianDlg CCebianBar::ceDlg; //定义静态成员
接着类向导中为该类添加WM_CRETE,WM_ONSIZE的消息响应,操作及代码如下:
//创建侧边栏
int CCebianBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
ceDlg.Create(IDD_CEBIAN, this);
ceDlg.ShowWindow(SW_SHOW);
return 0;
}
//改变尺寸响应
void CCebianBar::OnSize(UINT nType, int cx, int cy)
{
CDockablePane::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if (ceDlg.GetSafeHwnd())
{
CRect rct;
GetClientRect(rct);
ceDlg.MoveWindow(rct);
}
}
四、显示侧边栏。首先在CMainFrame里添加CCebianBar的成员变量
private:
CCebianBar ceBar;
然后在其成员函数OnCreate里添加代码实现侧边栏的创建和初始状态
//我的侧边栏
ceBar.Create(_T("侧边栏"), this, CRect(0, 0, 370, 416), TRUE, 666,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS,
AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE | AFX_CBRS_FLOAT);
ceBar.EnableDocking(CBRS_ALIGN_RIGHT);
DockPane(&ceBar);
好了,看一下最后的效果,比较简陋啊: )