2010-03-07 22 views
1

这个问题是我前一个问题的后续。 首先感谢这些链接和示例,它们可以工作于CMDIChildWnd派生的CChildFrame类,但不适用于CMDIChildWndEx派生类。如何在CMDIChildWndEx派生的CChildFrame中创建工具栏?

我想要做什么:

我想创建在CChildFrame窗口工具栏(从CMDIChildWndEx !!派生)

是我迄今所做的: 1)创建的MDI选项卡式文档使用VS2008Pro App向导的CView项目。 2)在CChildFrame我增加的OnCreate()

INT CChildFrame:在OnCreate(LPCREATESTRUCT LPCREATESTRUCT) { 如果(CMDIChildWndEx:在OnCreate(LPCREATESTRUCT)== - 1) 返回-1;

// TODO: Add your specialized creation code here 
    if (!m_wndToolBar.Create(this) || 
     !m_wndToolBar.LoadToolBar(IDR_CHILDFRAME)) 
    { 
     TRACE0("Failed to create toolbar\n"); 
     return -1;  // fail to create 
    } 


    // TODO: Remove this if you don't want tool tips or a 
    // resizeable toolbar 
    m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | 
     CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); 


    // 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); // Goes wrong here !! 


    return 0; 

}

它编译和运行,并停止到ASSERT在winfrm2.cpp(线 92):

空隙CFrameWnd的:DockControlBar(CControlBar * PBAR,CDockBar * pDockBar, LPCRECT lpRect) ENSURE_ARG(pBar!= NULL); //确保CControlBar :: EnableDocking已被调用 ASSERT(pBar-> m_pDockContext!= NULL);

if (pDockBar == NULL) 
    { 
      for (int i = 0; i < 4; i++) 
      { 
        if ((dwDockBarMap[i][1] & CBRS_ALIGN_ANY) == 
          (pBar->m_dwStyle & CBRS_ALIGN_ANY)) 
        { 
          pDockBar = (CDockBar*)GetControlBar(dwDockBarMap[i][0]); 

/* -------->在这里出错------> */ASSERT(pDockBar!= NULL); //当条的初始CBRS_不为 时//断言失败//与可用停靠点匹配,如由EnableDocking()设置的 break; } } } ENSURE_ARG(pDockBar!= NULL); ASSERT(m_listControlBars.Find(pBar)!= NULL); ASSERT(pBar-> m_pDockSite == this); //如果发生了这种说法是因为PBAR的父母是 最初没有 //这个CFrameWnd的时候 //即此控制栏应已随不同 父最初

pDockBar->DockControlBar(pBar, lpRect); 
创建PBAR的OnCreate被称为 管线92

}

ASSERT(!pDockBar = NULL);当酒吧的初始CBRS_不 //匹配可用的停放地点,由EnableDocking()设置 //断言失败

这里的来源甚至给出错误的发生的事情解释一下这里 但我不知道如何搭配'初始的CBRS_条设置为 EnableDocking()''

这是否适用于CMDIChildWndEx派生的CChildFrame类?

那么我的问题是否有人知道如何添加一个工具栏到 CMDIChildWndEx派生CChildFrame类? 关于如何使这项工作的任何建议?

我的项目是在这里: http://www.4shared.com/file/235762968/49b8b97a/GUI50.html

任何帮助将不胜感激!

回答

1

这似乎是一个CMFCToolBar

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
if (CMDIChildWndEx::OnCreate(lpCreateStruct) == -1) 
    return -1; 

    m_wndToolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_CHILDFRAME); 
    m_wndToolBar.LoadToolBar(IDR_CHILDFRAME, 0, 0, TRUE); 
    m_wndToolBar.SetPaneStyle(CBRS_TOOLTIPS | CBRS_FLYBY| CBRS_BOTTOM); 
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); 
    EnableDocking(CBRS_ALIGN_ANY); 
    DockPane(&m_wndToolBar); 

    return 0; 
} 
1

的工作,你应该设置m_bEnableFloatingBars =在MDIChild构造TRUE。没有这个工具栏将不会被鼠标停靠,只有静态对接。

相关问题