2015-08-22 34 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); 
相关问题