用的一个开源的类,叫XP Style Explorer Bar,可惜他给的例子是MDI的,我怎么在Dialog项目中使用?
下面的m_wndExpBar在.h中定义为CExpBarXP   m_wndExpBar;CExpBarXP最终继承CControlBar
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// create a view to occupy the client area of the frame
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Failed to create view window\n");
return -1;
}

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Symbolleiste konnte nicht erstellt werden\n");
return -1;      // Fehler bei Erstellung
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
  sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Statusleiste konnte nicht erstellt werden\n");
return -1;      // Fehler bei Erstellung
}  m_bPaneVisible[0] = m_bPaneVisible[1] = m_bPaneVisible[2] = FALSE;
  m_uProgress = 0L;  if (!m_wndExpBar.Create(_T("Explorer Bar"), this, 124, CBRS_LEFT|CBRS_SIZE_DYNAMIC))
//  if (!m_wndExpBar.Create(_T("Explorer Bar"), this, 123, CBRS_RIGHT|CBRS_SIZE_DYNAMIC))
  {
    TRACE0("Failed to create explorer bar\n");
    return -1;      // fail to create
  }  m_wndExpBar.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT);  m_hBigIcon = CreateImageList(AfxGetApp()->m_hInstance,IDB_FOLDER,
                               48,RGB(0xFF,0x00,0xFF),&m_uNumIcons,NULL,NULL,NULL);  m_hTaskLinkIcons[1] = CreateImageList(AfxGetApp()->m_hInstance,IDB_IMAGELIST,
                                        16,RGB(123,124,125),&m_uNumIcons,NULL,&m_hTaskLinkIcons[2],
                                        &m_hTaskLinkIcons[0]);
EnableDocking(CBRS_ALIGN_ANY);#ifdef _SCB_REPLACE_MINIFRAME
  m_pFloatingFrameClass = RUNTIME_CLASS(CSCBMiniDockFrameWnd);
#endif DockControlBar(&m_wndToolBar);
  DockControlBar(&m_wndExpBar); return 0;
}

解决方案 »

  1.   

    使用CDialogBar子类实例也行
    最好把控制条“嵌入”原先的对话框窗口中,而不是另开一个窗口
    或者谁干脆把这份源码改成dialog的。。
      

  2.   

    你还不是可以用SDI,把View类换成CFormView,使用上就和对话框差不多了,这样你用CControlBar、CDialogBar应该都没有啥问题吧
      

  3.   

    回VisualEleven:
    我目前采用了你的建议,现在有个问题是这个controlbar的标题栏和边框如何去掉?
      

  4.   

    因为CDialog没有RecalcLayout过程,所以无法实现停靠。