標籤:控制 splay 滑鼠 效果 article too tar toolbar nav
轉自: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:設定兩個工具條並列停靠到同一條邊上 轉