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();
}

 

posted @ 2020-03-14 10:15  伟大的厨师  阅读(224)  评论(0编辑  收藏  举报