轉自:http://blog.csdn.net/panshiqu/article/details/9369891#函數
將多個工具條同時並列停靠在某窗口的某一條邊上。對於這種停靠方法,利用上述工具條控制函數DockControlBar的lpRect參數,經過控制工具條的停靠矩形區域的方法能夠實現工具
1:在MainFrm.h中增長以下成員函數定義spa
// 增長 public: void DockControlBarLeftOf(CToolBar* bar, CToolBar* leftof); 、
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()函數的調用,前一個函數用來從新顯示被調整的客戶區和工具條,後一個函數用來從新肯定矩形區域,這至關於利用鼠標將第二個工具條窗口拖動到前一個工具條上而後釋放。.net
3:就是調用上面這個函數,假設你新建的toolbar變量是m_wndToolBarNav,那麼就用下面的程序替換原來MainFrm.cpp中的片斷code
原:blog
// 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);//主要是這裏