Knowledge Base Nr: 00317 multtoolbar.cpp - http://www.swe-kaiser.de

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);