尝试使用垂直方向的 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 :(得分: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);