如何使用 CControlBar 實作 Docking Windows

前一個禮拜一直在 CSplitterWnd 上糾結切割視窗

沒想到最後爬論壇發現 CSplitterWnd 只支援 SDI 和 MDI 的 ChildFrm (暈倒)

如果要使用 CSplitterWnd 來切 MDI 的 MainFrm 會變得很複雜

而且原來 Visual Studio 是使用 Docking Control Bar 的方式來實作視窗分割

所以就馬上轉移陣地開始研究 Docking Control Bar 要怎麼使用了

先來看一下成功之後的畫面,看起來是不是有點Fu了阿嘿嘿

2014-07-09-01

 

謝謝 Cristi Posea 在 CodeProject 上貢獻的專案

他已經使用 CControlBar 寫出一個可調整大小的 CSizingControlBar

所以只要下載下來,照著教學一步一步做就完成囉

另外因為我是參考資料二作者王駿的方法還要在左邊的 DockingBar 中加入 TreeCtrl

可是用 Cristi Posea 的在 OnSize() 會出錯

所以後來被我找到王駿修改過的版本,就可以正常編過了

程式碼可以在參考資料3中下載,和下述過程不同的是不需要步驟3

步驟4 不需要 include、以及把 MyBar 改成 CCoolBar 即可

不過和上面的看起來就會有點不一樣,是沒有加入任何控件的純 DockingBar

2014-07-11-01

 

[實作過程]

1. 加入 sizecbar.h、sizecbar.cpp、scbarg.h、scbarg.cpp 檔案

2. 在 stdafx.h 中加入以下程式碼

#include "sizecbar.h"
#include "scbarg.h"

3. 從 CSizingControlBarG 中派生一個 Class (可以參考 mybar.* files)

4. 在 mainfrm.h 中加入

#include "mybar.h"
CMyBar m_wndMyBar;

5.  在 mainfrm.cpp 中加入

if(!m_wndMyBar.Create(_T("My Bar"), this, 123))
{
    TRACE0("Failed to create mybar\n");
    return -1;
    // fail to create
}
m_wndMyBar.SetBarStyle(m_wndMyBar.GetBarStyle() |
    CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

m_wndMyBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndMyBar, AFX_IDW_DOCKBAR_LEFT);

 

[參考資料]
1. CSizingControlBar – a resizable control bar

2. 轻松实现类VC界面

3. 轻松实现类VC界面》配套源代码