我定义了一个CDialogBar的子类(COnlineBar),在MainFrame中create一个COnlinBar对象之后,无法dock。原因是该对象的m_pDockSite没有被初始化,为0x00000000,但是如果不用COnlineBar而直接使用CDialogBar,则可以。请高手指教问题在哪里?

解决方案 »

  1.   

    像使用CToolBar那样使用就行了
      

  2.   

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    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("Failed to create toolbar\n");
    return -1;      // fail to create
    } if (!m_wndStatusBar.Create(this) ||
    !m_wndStatusBar.SetIndicators(indicators,
      sizeof(indicators)/sizeof(UINT)))
    {
    TRACE0("Failed to create status bar\n");
    return -1;      // fail to create
    } //Create the user command bar in the CMainFrame's bottom!
       if (!m_wndDlgBar.Create(this, IDD_COMMAND_BAR,
          CBRS_BOTTOM|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_COMMAND_BAR))
       {
          TRACE0("Failed to create DlgBar\n");
          return -1;      // Fail to create.
       }
    // TODO: Delete these three lines if you don't want the toolbar to
    //  be dockable
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar); return 0;
    }