MFC文档应用程序CToolBar:设置两个工具条并列停靠到同一条边上 转

Posted wolfplan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC文档应用程序CToolBar:设置两个工具条并列停靠到同一条边上 转相关的知识,希望对你有一定的参考价值。

转自:http://blog.csdn.net/panshiqu/article/details/9369891#

将多个工具条同时并列停靠在某窗口的某一条边上。对于这种停靠方法,利用上述工具条控制函数DockControlBar的lpRect参数,通过控制工具条的停靠矩形区域的方法可以实现

1:在MainFrm.h中增加如下成员函数定义

// 增加  
public:  
    void DockControlBarLeftOf(CToolBar* bar, CToolBar* leftof);  、
2:在MainFrm.cpp中实现成员函数
void CMainFrame::DockControlBarLeftOf(CToolBar* bar, CToolBar* leftof)  
{  
    //设置工具条并列停靠到同一条边上  
    CRect rect;  
    DWORD dw;  
    UINT n=0;  
    RecalcLayout(); //重新显示  
    leftof->GetWindowRect(rect);  
    rect.OffsetRect(1, 0);  
    dw=leftof->GetBarStyle();  
    n=(dw&CBRS_ALIGN_TOP)?AFX_IDW_DOCKBAR_TOP:n;  
    n=(dw&CBRS_ALIGN_BOTTOM&&n==0)?AFX_IDW_DOCKBAR_BOTTOM:n;  
    n=(dw&CBRS_ALIGN_LEFT&&n==0)?AFX_IDW_DOCKBAR_LEFT:n;  
    n=(dw&CBRS_ALIGN_RIGHT&&n==0)?AFX_IDW_DOCKBAR_RIGHT:n;  
    DockControlBar(bar,n,&rect);  
}  

  

在这个函数中应注意对RecalcLayout()函数和OffsetRect()函数的调用,前一个函数用来重新显示被调整的客户区和工具条,后一个函数用来重新确定矩形区域,这相当于利用鼠标将第二个工具条窗口拖动到前一个工具条上然后释放。

3:就是调用上面这个函数,假设你新建的toolbar变量是m_wndToolBarNav,那么就用下面的程序替换原来MainFrm.cpp中的片段

原:

// TODO: 如果不需要可停靠工具栏,则删除这三行  
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);  
EnableDocking(CBRS_ALIGN_ANY);  
DockControlBar(&m_wndToolBar);
替换后:
// TODO: 如果不需要可停靠工具栏,则删除这三行  
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);  
m_wndToolBarNav.EnableDocking(CBRS_ALIGN_ANY);  
EnableDocking(CBRS_ALIGN_ANY);  
DockControlBar(&m_wndToolBar);  
DockControlBarLeftOf(&m_wndToolBarNav,&m_wndToolBar);//主要是这里
以上三个步骤后,就可以去看效果啦

以上是关于MFC文档应用程序CToolBar:设置两个工具条并列停靠到同一条边上 转的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TBSTYLE_FLAT 在 MFC CToolBar 上正确显示静态文本?

vc++ 工具栏 高度如何改变

MFC工具栏

mfc中的CMFCToolBar类怎么实现工具栏上的按钮多行显示??急!!!

CSplitterWnd 的独立滚动条? (MFC)

CToolBar 是停靠还是浮动?