MFC 如何启用状态栏的停靠?
MFC How to enable docking for a status bar?
我在 class CMainFrame : public CFrameWnd
class 中创建了状态栏 CStatusBar statusBar;
我正在这样做:
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);
这里有什么问题(几乎相同的行为适用于工具栏)?
是否可以制作启用对接的状态栏?
我相信这是可能的,因为我在图片中有这个:
]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);
时才会变成。
没有这个也行不通,我认为这很正常
但为什么它不起作用?
您的状态栏创建了两次。第二次没有任何资源。删除第二个CreateEx,它应该没有问题。
我在 class CMainFrame : public CFrameWnd
class 中创建了状态栏 CStatusBar statusBar;
我正在这样做:
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);
这里有什么问题(几乎相同的行为适用于工具栏)? 是否可以制作启用对接的状态栏?
我相信这是可能的,因为我在图片中有这个:
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);
时才会变成。
没有这个也行不通,我认为这很正常
但为什么它不起作用?
您的状态栏创建了两次。第二次没有任何资源。删除第二个CreateEx,它应该没有问题。