CBCGP中使用CBCGPDockingControlBar
在例子CBCGPExplorer中左边的文件列表使用了CBCGPDockingControlBar,
主要想试一下用CBCGPDockingControlBar实现类似界面分割的功能如上面2个框,下面1个框,用splitterwnd分割起来有些麻烦,
如果要分成3个窗口,得要4个对话框
于是复制了一份例子中用到的CFolderBar,改名CListBar,对应的名字休改完后添加到mainframe中使用,记得把复制的.h中的#ifdefinexxxxxx头标志 修改一下,防止重复了
添加create等代码:
if (!m_wndListBar.Create(_T(" List"), this, CRect(0, 0, nFoldersPaneSize+100, nFoldersPaneSize+100), FALSE, ID_VIEW_LIST_BAR,
WS_CHILD | WS_VISIBLE | CBRS_LEFT))
{
TRACE0("Failed to create folders bar\n");
return -1; // fail to create
}
其它的停靠也加上了,只要m_wndFolderBar中用的,都添加了
但是一运行起来,listbar这个窗口有卡屏
是因为在FolderBar中的onsize 里有下面的代码:我觉得m_wndShellTree 没必要加,所以在listbar中就注掉了,
但是这是个树形结构的类,我在listbar中不用,是空的 ,不就不用加吗?看来不行
不知道为什么,暂时先加上吧。
void CFolderBar::OnSize(UINT nType, int cx, int cy)
{
CBCGPDockingControlBar::OnSize(nType, cx, cy);
m_wndShellTree.SetWindowPos (NULL, 0, 0,
cx, cy,
SWP_NOACTIVATE | SWP_NOZORDER);
}
添加了2个bar运行起来还行,
添加第3个后运行起来卡屏,不知道怎么回事儿,
注掉第3个仍然那样。。。
清除注册表后就可以了
显示controlbar可以用下面代码:
void CMainFrame::OnViewFolders()
{
ShowControlBar(&m_wndFoldersBar,
!(m_wndFoldersBar.GetStyle() & WS_VISIBLE),
FALSE, TRUE);
RecalcLayout();
}