Knowledge Base Nr: 00317 multtoolbar.cpp - http://www.swe-kaiser.de
Downloads:
MFC: mehrere toolbars verwenden und ein/ausschalten
# member für jede toolbar anlegen
# MainFrm.h:
CToolBar m_tbMainframe;
CToolBar m_tbKennlinie;
CToolBar m_tbRaster;
# toolbars anlegen und umschalten
# MainFrm.cpp:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
if (!m_tbMainframe.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_tbMainframe.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Fehler beim Erstellen der Symbolleiste.\n");
return -1; // Fehler beim Erstellen
}
if (!m_tbKennlinie.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_tbKennlinie.LoadToolBar(IDR_KENNLINIE))
{
TRACE0("Fehler beim Erstellen der Symbolleiste.\n");
return -1; // Fehler beim Erstellen
}
if (!m_tbRaster.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_tbRaster.LoadToolBar(IDR_RASTER))
{
TRACE0("Fehler beim Erstellen der Symbolleiste.\n");
return -1; // Fehler beim Erstellen
}
...
}
void CMainFrame::DoSwitchToolbar(DOCTYPES eType)
{
BOOL bMainframe = FALSE;
BOOL bKennlinie = FALSE;
BOOL bRaster = FALSE;
switch (eType)
{
case DT_NONE:
bMainframe = TRUE; bKennlinie = FALSE; bRaster = FALSE; break;
case DT_PUMPE:
case DT_TURBINE:
bMainframe = FALSE; bKennlinie = TRUE; bRaster = FALSE; break;
case DT_RASTER:
bMainframe = FALSE; bKennlinie = FALSE; bRaster = TRUE; break;
default: ASSERT(FALSE);
}
ShowControlBar(&m_tbMainframe, bMainframe, FALSE);
ShowControlBar(&m_tbKennlinie, bKennlinie, FALSE);
ShowControlBar(&m_tbRaster, bRaster, FALSE);
}
# anlegen eines neuen documents
# xxxxApp.cpp:
void CCurvesApp::OnFileNew()
{
...
if (pDoc)
pMainWnd->DoSwitchToolbar(pDoc->GetDocType());
else
pMainWnd->DoSwitchToolbar(DT_NONE);
...
}
# anklicken des fensters
# xxxView.cpp:
void CBaseView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
CScrollView::OnActivateView(bActivate, pActivateView, pDeactiveView);
CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
CBaseDoc* pDoc = GetDocument();
pMainWnd->DoSwitchToolbar(pDoc->GetDocType());
}
# schließen des letzten fensters
# ChildFrm.cpp:
void CChildFrame::OnNcDestroy()
{
CMDIChildWnd::OnNcDestroy();
CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
pMainWnd->DoSwitchToolbar(DT_NONE);
}
# aufruf von beliebiger stelle
((CMainFrame*)AfxGetMainWnd())->DoSwitchToolbar(DT_PUMPE);