Cette question fait suite à ma précédente question. D'abord merci pour les liens et les exemples, ils fonctionnent pour une classe CChildFrame dérivée de CMDIChildWnd, mais pas pour un dérivé dérivé de CMDIChildWndEx.Comment créer une barre d'outils dans CChildFrame dérivé de CMDIChildWndEx?
Ce que je veux faire:
Je veux créer une barre d'outils dans la fenêtre CChildFrame (dérivée de CMDIChildWndEx !!)
Ce que je l'ai fait jusqu'à présent: 1) a créé un document MDI Tabbed Projet CView utilisant l'assistant d'application VS2008Pro. 2) i CChildFrame ajouté OnCreate()
int CChildFrame :: OnCreate (LPCREATESTRUCT lpCreateStruct) {if (CMDIChildWndEx :: OnCreate (lpCreateStruct) == -1) -1 retour;
// 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;
}
il compile et fonctionne et arrête dans un ASSERT dans winfrm2.cpp (ligne 92):
vide CFrameWnd :: DockControlBar (CControlBar * pBar, CDockBar * pDockBar, LPCRECT lpRect) { ENSURE_ARG (pBar! = NULL); // s'assure que CControlBar :: EnableDocking a été appelé 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]);
/* --------> va mal ici ------> */assert (pDockBar! = NULL); // assert échoue lorsque CBRS_ initial de la barre ne // correspond aux sites d'ancrage disponibles, comme défini par EnableDocking() break; } } } ENSURE_ARG (pDockBar! = NULL); ASSERT (m_listControlBars.Find (pBar)! = NULL); ASSERT (pBar-> m_pDockSite == this); // si cette affirmation a eu lieu c'est parce que le parent de pBar était pas initialement // ce CFrameWnd quand OnCreate de pBar a été appelé //-à-dire cette barre de contrôle aurait dû être créé avec un parent différent initialement
pDockBar->DockControlBar(pBar, lpRect);
}
en ligne 92:
assert (! pDockBar = NULL); // assert échoue lorsque CBRS_ initial de la barre ne // disponibles correspondent à des sites d'amarrage, tel que par EnableDocking()
la source ici donne même une explication de ce qui se passe mal ici mais je ne sais pas comment faire correspondre 'CBRS_ initial de barre avec ceux définis par EnableDocking()' '
Est-ce que cela fonctionne même pour une classe CChildFrame dérivée de CMDIChildWndEx?Eh bien, ma question est de savoir comment ajouter une barre d'outils à une classe CChildFrame dérivée de CMDIChildWndEx ? Des suggestions pour que cela fonctionne?
Mon projet est ici: http://www.4shared.com/file/235762968/49b8b97a/GUI50.html
Toute aide serait grandement appréciée!