PDA

Visualizza la versione completa : [C++] Rimozione menu da menubar con MFC


giuseppe500
10-10-2007, 14:40
ciao.
Ho il seguente codice per rimuovere il menu "CISI" dal menu del frame princiale.

m_menu->Attach(GetMenu()->m_hMenu);
CString str;
for (UINT i=0;i < m_menu->GetMenuItemCount();i++)
{

m_menu->GetMenuString(i,str,MF_BYPOSITION);
if(str=="CISI")
{
m_menu->DeleteMenu(i,MF_BYPOSITION);
}
}
m_menu->Detach();
DrawMenuBar();

se provo a cancellare il menu cisi mi da errore: quando esco dalla funzione qui:

BOOL CCmdUI::DoUpdate(CCmdTarget* pTarget, BOOL bDisableIfNoHndler)
{
ASSERT_VALID(pTarget);

if (m_nID == 0 || LOWORD(m_nID) == 0xFFFF)
return TRUE; // ignore invalid IDs

m_bEnableChanged = FALSE;
BOOL bResult = pTarget->OnCmdMsg(m_nID, CN_UPDATE_COMMAND_UI, this, NULL);
if (!bResult)
ASSERT(!m_bEnableChanged); // not routed

if (bDisableIfNoHndler && !m_bEnableChanged)
{
AFX_CMDHANDLERINFO info;
info.pTarget = NULL;
BOOL bHandler = pTarget->OnCmdMsg(m_nID, CN_COMMAND, this, &info);

#ifdef _DEBUG
if (!bHandler)
TRACE(traceCmdRouting, 1, "No handler for command ID 0x%04X, disabling it.\n", m_nID);
#endif
// Enable or Disable based on whether there is a handler there
errore ------------------------->Enable(bHandler);
}
return bResult;
}

c' pero' da dire che cancello il menu sull' updateui dello stesso:
questa la funzione che scatena la cancellazione del menu:

void CCMPView::OnUpdateCisiMenu(CCmdUI* pCmdUI)
{
switch(GetDocument()->GetLevel(MOD_MODELLAZIONE)) {
case ADMINISTRATORS:
case CISI:
pCmdUI->Enable();
break;
default: //Da gestire: visualizzazione menu CISI

//pCmdUI->Enable(FALSE);

CMainFrame * pFrame = (CMainFrame*)AfxGetMainWnd();
canc menu cisi------------------->pFrame->DropCisiMenu();

}
}
grazie.

Loading