基于CControlBar创建水平或垂直方向的自定义工具栏

MFC: Creating horizontally or vertically oriented custom toolbar based on CControlBar

本文关键字:方向 自定义 工具栏 垂直 CControlBar 创建 水平 基于      更新时间:2023-10-16

尝试使用垂直方向的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_ *。多谢。

托马斯

我从来没有得到一个工具栏来对齐它的左右只是设置CreateEx调用。潘斯没有问题。甚至调试到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);