【问题标题】:MFC: Creating horizontally or vertically oriented custom toolbar based on CControlBarMFC:基于 CControlBar 创建水平或垂直方向的自定义工具栏
【发布时间】:2015-09-02 15:48:31
【问题描述】:

尝试使用垂直方向的 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 参数)请看上面sn-p 中的参数CBRS_ *。非常感谢。

托马斯

【问题讨论】:

    标签: c++ mfc docking


    【解决方案1】:

    我从来没有使用 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);
    

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 2019-11-12
      • 2015-05-31
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多