现在我的酒吧位于框架上,感谢nDockBarID = AFX_IDW_DOCKBAR_LEFT
ForcesBar* m_forcesBar[3];
for (int i=0; i<3; i++)
{
m_forcesBar[i]->SetBarStyle(m_forcesBar[i]->GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_forcesBar[i]->EnableDocking(CBRS_ALIGN_ANY);
}
pMainFrame->EnableDocking(CBRS_ALIGN_ANY);
pMainFrame->DockControlBar(m_forcesBar[0], AFX_IDW_DOCKBAR_LEFT);
pMainFrame->DockControlBar(m_forcesBar[1], AFX_IDW_DOCKBAR_LEFT);
pMainFrame->DockControlBar(m_forcesBar[2], AFX_IDW_DOCKBAR_LEFT);
虽然我想收到这样的酒吧组合:
我认为在
中使用lpRect会很好void DockControlBar(
CControlBar* pBar,
UINT nDockBarID = 0,
LPCRECT lpRect = NULL
);
但遗憾的是它不起作用。 你能给出代码示例来制作这种特定的doking(secon图片)。
(在项目中我使用CSizingControlBar http://www.datamekanix.com/sizecbar/manual.html)
答案 0 :(得分:1)
我测试了它并使用矩形工作正常。 一个区别是,在我的测试应用程序中,我已将MainFrm.h中的m_forcesBar声明为
ForcesBar m_forcesBar[3];
避免在堆上进行分配并记住内存释放。
我使用的代码(来自OnCreate的代码段):
EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar1);
DockControlBar(&m_wndToolBar2);
CRect rectWnd;
GetClientRect(rectWnd);
ClientToScreen(rectWnd);
for(int iIndx = 0; iIndx < 3; iIndx++)
{
if (!m_forcesBar[iIndx].Create(_T(""), this, 120 + iIndx))
{
TRACE0("Failed to create mybar\n");
return -1; // fail to create
}
m_forcesBar[iIndx].SetBarStyle(m_forcesBar[iIndx].GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_forcesBar[iIndx].EnableDocking(CBRS_ALIGN_LEFT);
DockControlBar(&m_forcesBar[iIndx], AFX_IDW_DOCKBAR_LEFT, rectWnd);
}
就是这样。