MFC如何为状态栏启用对接?

时间:2015-12-15 20:26:48

标签: visual-c++ mfc statusbar docking

我在CStatusBar statusBar;课程中创建了状态栏class CMainFrame : public CFrameWnd 我这样做:

if (!statusBar.CreateEx(this, TBSTYLE_AUTOSIZE, WS_CHILD | CBRS_TOP | WS_VISIBLE | CBRS_GRIPPER) ||
    !statusBar.LoadToolBar(IDR_TOOLBAR))
{
  return -1;
}

if (!statusBar.CreateEx(this, SBARS_TOOLTIPS, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | CBRS_GRIPPER))
{
  return -1;
}
statusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));

//然后尝试:

  statusBar.EnableDocking(CBRS_ALIGN_BOTTOM); // here I recieve an assertion

  EnableDocking(CBRS_ALIGN_BOTTOM);
  DockControlBar(&statusBar);

这里有什么问题(几乎相同的行为适用于工具栏)? 是否可以创建一个启用了对接的状态栏?

我认为这是可能的,因为我在图片中有这个:

enter image description here] 1

UPD

这就是我在代码中所拥有的:

    if (!m_wndStatusBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | CBRS_GRIPPER | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
    {
        TRACE0("Не удалось создать строку состояния\n");
        return -1;
    }
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT));

    // TODO: 
  m_wndStatusBar.EnableDocking(CBRS_ALIGN_ANY);
  EnableDocking(CBRS_ALIGN_ANY);
  DockControlBar(&m_wndStatusBar);

我仍然接受只有在我添加DockControlBar(&m_wndStatusBar);时才会出现的断言。 如果没有这个也不行,我认为这是正常的 但为什么不与它合作呢?

enter image description here

1 个答案:

答案 0 :(得分:2)

您的statusBar已创建两次。第二次没有任何资源。删除第二个CreateEx,它应该没有任何问题。