2010-03-07 43 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。沒有這個工具欄將不會被鼠標停靠,只有靜態對接。

相關問題