我需要水平显示一个 CToolbar (m_wndToolBar) 和一个 CDialogBar (m_wndDlgBarSid1)(即彼此相邻,而不是彼此上方)。父框架派生自 CMDIFrameWnd。
我已经尝试了各种变化来让它工作。虽然我可以将 CDialogBar 正确定位到 CToolbar 的右侧,但我无法保持定位,尽管 WINDOWPLACEMENT 机制工作正常(注册表是在程序退出时编写的);每当程序运行时,CToolbar 显示在左侧停靠,CDialogBar 显示在其下方,也停靠在左侧。我正在使用(perforce)MFC 和 Visual C++ 6.0。这是代码,稍微编辑以删除调试打印输出等:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
{
return -1;
}
if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME) )
{
return -1; // fail to create
}
if (!m_wndDlgBarSid1.Create(this, IDD_DIALOGBAR_SID1, CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
{
return -1; // fail to create
}
WINDOWPLACEMENT wp ;
CString sSection = "DialogBarSettings";
CString sEntry = "Sid1";
if ( ReadWindowPlacement( &wp, sSection, sEntry ))
{
BOOL bSWP = m_wndDlgBarSid1.SetWindowPlacement( &wp );
RecalcLayout();
}
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndToolBar.GetToolBarCtrl().ModifyStyle( 0, TBSTYLE_FLAT, 0 ) ;
m_wndDlgBarSid1.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY ) ;
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
m_wndDlgBarSid1.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
DockControlBar(&m_wndDlgBarSid1,AFX_IDW_DOCKBAR_TOP);
return 0;
}
有什么想法吗?