2015-08-22 59 views
0

創建水平或垂直定向的自定義工具欄嘗試垂直定向CControlBar - 來自自定義工具欄。大概沒有結果,因爲它總是水平的或者總是垂直的,或者我實際上不知道 - 太多的參數要同步,我很害怕!MFC:基於CControlBar

這裏是我到目前爲止有:

// creating the CControlBar-derived toolbar 
CMyCB cb; // CControlBar-derived toolbar 
cb.Create( AfxRegisterWndClass(0), 
     NULL, 
     WS_CHILD | WS_VISIBLE , 
     CRect(0,0,100,100), 
     AfxGetMainWnd(), 
     0 
); 
cb.SetBarStyle(cb.GetBarStyle() | CBRS_LEFT | CBRS_SIZE_DYNAMIC | CBRS_GRIPPER); 
cb.EnableDocking(CBRS_ORIENT_HORZ); 

// in CFrameWnd-derived window constructor 
this->EnableDocking(CBRS_ALIGN_ANY); 
this->FloatControlBar(&cb, CPoint(100,100), CBRS_ALIGN_LEFT); 
this->ShowControlBar(&cb, TRUE, FALSE); 

觀察如何CControlBar :: CalcFixedLayout(在CMyCB重寫)是通過將一個斷點那裏叫,我可以看到它的bHorz參數(通知cb是水平還是垂直工具欄)對於第一個調用而言爲「2」,對於隨後的第二個調用則爲「0」。

我能從中得出什麼結論?有沒有辦法創建一個水平一致或垂直一致的自定義工具欄? (至少對於bHorz自變量)請參閱上述代碼段中的參數CBRS_ *。非常感謝。

托馬斯

回答

0

我從來沒有得到一個工具欄,將其調整到左,右剛剛與設置的CreateEx調用。 Panes沒有問題。即使調試到MFC代碼的深度也沒有顯示出原因。

所以這裏我的簡單解決方案。

m_wndHorzBar是要與左邊對齊的小節的名稱。我只是使用嚮導來創建一些示例代碼,我期望您有一個正常的工具欄和一個菜單,以便您可以看到上下文。

// Create it (just for simplicity no error checking) 
// CBR_LEFT seamed to be ignored 
m_wndHorzBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); 

... 

// Allow the normal bars to align anywhere 
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); 
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); 
// this bar should be aligned only in the left docking area 
m_wndHorzBar.EnableDocking(CBRS_ALIGN_LEFT); 

// Perform the initial docking 
EnableDocking(CBRS_ALIGN_ANY); 
DockPane(&m_wndMenuBar); 
DockPane(&m_wndToolBar); 
DockPane(&m_wndHorzBar); 

// Now allow the bar to be docked anywhere by the user 
m_wndHorzBar.EnableDocking(CBRS_ALIGN_ANY); 
相關問題