//////////////////////////////////////////////////// //Classe per la configurazione dei menu utente //in base alle informazioni indicate // //Realizzato da Francesco Germinara (c) 2004 //Copyright SofTech di Francesco Germinara (c) 2004 //Data realizzazione: 11/02/2004 //////////////////////////////////////////////////// #include "stdafx.h" #include"CFgMenuCfg.h" #include "CDlgFGCfgMenu.h" //Default constructor CFgMenuCfg::CFgMenuCfg(){ ResetContents(); m_strUserCode=""; m_strPathPgm=""; pMenu=NULL; pSubMenu=NULL; pSubSubMenu=NULL; pToolBar=NULL; pToolBar2=NULL; pToolBar3=NULL; pToolBar4=NULL; pToolBar5=NULL; pToolBar6=NULL; } //Default destrcuctor CFgMenuCfg::~CFgMenuCfg(){ } void CFgMenuCfg::Attach(CMenu *pWndMenu,CToolBar* pWndToolBar,CToolBar *pWndToolBar2,CToolBar *pWndToolBar3,CToolBar *pWndToolBar4,CToolBar *pWndToolBar5,CToolBar *pWndToolBar6,CString strIDToolBar1,CString strIDToolBar2,CString strIDToolBar3,CString strIDToolBar4,CString strIDToolBar5,CString strIDToolBar6){ pMenu=pWndMenu; pSubMenu=NULL; pSubSubMenu=NULL; pToolBar=pWndToolBar; pToolBar2=pWndToolBar2; pToolBar3=pWndToolBar3; pToolBar4=pWndToolBar4; pToolBar5=pWndToolBar5; pToolBar6=pWndToolBar6; m_strIDToolBar1=strIDToolBar1; m_strIDToolBar2=strIDToolBar2; m_strIDToolBar3=strIDToolBar3; m_strIDToolBar4=strIDToolBar4; m_strIDToolBar5=strIDToolBar5; m_strIDToolBar6=strIDToolBar6; } //Set a new Item menu or modify one's. void CFgMenuCfg::SetMenuItem(CString strName,int nIdMenu,int nIdButton,int nPosMenu,int nPosButton,int nStyleMenu,int nStyleButton,CString strIdMenu,CString strIdToolBar){ int nIndex=-1; nIndex=FindByName(strName); if(nIndex == -1){ //New Item m_cfgMenuItems[m_nItems].SetValue(strName,nIdMenu,nIdButton,nPosMenu,nPosButton,nStyleMenu,nStyleButton,pMenu,pSubMenu,pToolBar,strIdMenu,pSubSubMenu,pToolBar2,pToolBar3,pToolBar4,pToolBar5,pToolBar6,strIdToolBar); m_nItems++; }else{ //Modify Item m_cfgMenuItems[m_nItems].SetValue(strName,nIdMenu,nIdButton,nPosMenu,nPosButton,nStyleMenu,nStyleButton,pMenu,pSubMenu,pToolBar,strIdMenu,pSubSubMenu,pToolBar2,pToolBar3,pToolBar4,pToolBar5,pToolBar6,strIdToolBar); } } //Set a new Item menu or modify one's. void CFgMenuCfg::SetMenuItem(CString strName,int nPosButton,int nStyleMenu,int nStyleButton){ int nIdMenu=0; int nIdButton=0; int nPosMenu=0; CString strIdMenu; CString strIdToolBar; strIdMenu=""; strIdToolBar=""; int nIndex=-1; nIndex=FindByName(strName); if(nIndex == -1){ //New Item m_cfgMenuItems[m_nItems].SetValue(strName,nIdMenu,nIdButton,nPosMenu,nPosButton,nStyleMenu,nStyleButton,pMenu,pSubMenu,pToolBar,strIdMenu,pSubSubMenu,pToolBar2,pToolBar3,pToolBar4,pToolBar5,pToolBar6,strIdToolBar); m_nItems++; }else{ //Modify Item m_cfgMenuItems[m_nItems].SetValue(strName,nIdMenu,nIdButton,nPosMenu,nPosButton,nStyleMenu,nStyleButton,pMenu,pSubMenu,pToolBar,strIdMenu,pSubSubMenu,pToolBar2,pToolBar3,pToolBar4,pToolBar5,pToolBar6,strIdToolBar); } } //Find by Name int CFgMenuCfg::FindByName(CString strName){ int nIndex=0; strName.TrimRight(); if(strName.IsEmpty()) return -1; for(nIndex=0; nIndex=0 && nIndexGetSafeHmenu())); int count = Menu->GetMenuItemCount(); for (int i = 0; i < count; i++) { CString str; if (Menu->GetMenuString(i, str, MF_BYPOSITION) && (strcmp(str, MenuString) == 0)) return i; else{ CMenu* subsubmenu=Menu->GetSubMenu(i); if(subsubmenu != NULL){ nPosSub=-1; nPosSub=FindSubSubMenuItem(subsubmenu,MenuString); if(nPosSub != -1){ return i; } } } } return -1; } int CFgMenuCfg::FindSubSubMenuItem(CMenu* Menu, LPCTSTR MenuString) { ASSERT(Menu); ASSERT(::IsMenu(Menu->GetSafeHmenu())); int count = Menu->GetMenuItemCount(); for (int i = 0; i < count; i++) { CString str; if (Menu->GetMenuString(i, str, MF_BYPOSITION) && (strcmp(str, MenuString) == 0)) return i; } return -1; } int CFgMenuCfg::FindSubMenuItemByPos(CMenu* Menu,int mnuPos, LPCTSTR MenuString){ CMenu* submenu = Menu->GetSubMenu(mnuPos); int pos=-1; pos = FindMenuItem(submenu,MenuString); return pos; } int CFgMenuCfg::FindMenuItemAll(CMenu* Menu, LPCTSTR MenuString,int& nPosMainMenu) { ASSERT(Menu); ASSERT(::IsMenu(Menu->GetSafeHmenu())); nPosMainMenu=-1; int pos=-1; int count = Menu->GetMenuItemCount(); for (int i = 0; i < count; i++) { CString str; if(Menu->GetMenuString(i, str, MF_BYPOSITION) && (strcmp(str, MenuString) == 0)) return i; else{ pos=FindSubMenuItemByPos(Menu,i,MenuString); if(pos != -1){ nPosMainMenu=i; return pos; } } } return -1; } void CFgMenuCfg::DeleteMenu(CString strName){ CfgMenuItemClass* pTmpItem=GetByName(strName); if(pTmpItem != NULL){ if(pTmpItem->GetIdStrMenu()=="ID_MNU_SECONDO_SECONDO1") int h=0; nPosSub=-1; if(pTmpItem->GetStyleMenu()==0){ //Cerco le posizione nel menu... int nPosMainMenu=-1; int posSubMenu=FindMenuItemAll(pMenu,strName,nPosMainMenu); if((nPosMainMenu == -1) && (posSubMenu != -1) && (nPosSub==-1)) //E' nel menu principale... pMenu->DeleteMenu(posSubMenu,MF_BYPOSITION); if((nPosMainMenu != -1) && (posSubMenu != -1) && (nPosSub==-1)){ //E' nel sottomenu ... pSubMenu =pMenu->GetSubMenu(nPosMainMenu); if(pSubMenu != NULL) pSubMenu->DeleteMenu(posSubMenu,MF_BYPOSITION); } if((nPosMainMenu != -1) && (posSubMenu != -1) && (nPosSub!=-1)){ //E' nel sottosottomenu ... pSubMenu =pMenu->GetSubMenu(nPosMainMenu); if(pSubMenu != NULL){ pSubSubMenu =pSubMenu->GetSubMenu(posSubMenu); if(pSubSubMenu != NULL) pSubSubMenu->DeleteMenu(nPosSub,MF_BYPOSITION); } } } //Delete button on toolbars DeleteButton(pTmpItem,pTmpItem->pToolBar1,m_strIDToolBar1); DeleteButton(pTmpItem,pTmpItem->pToolBar2,m_strIDToolBar2); DeleteButton(pTmpItem,pTmpItem->pToolBar3,m_strIDToolBar3); DeleteButton(pTmpItem,pTmpItem->pToolBar4,m_strIDToolBar4); DeleteButton(pTmpItem,pTmpItem->pToolBar5,m_strIDToolBar5); DeleteButton(pTmpItem,pTmpItem->pToolBar6,m_strIDToolBar6); } } //Delete all item previous indicate void CFgMenuCfg::RebuildMenu(){ int i=0; for(i=0; i< m_nItems; i++){ DeleteMenu(m_cfgMenuItems[i].GetName()); } RemoveAllSeparator(); } //Init Data void CFgMenuCfg::InitCfgMenu(CString usrID,CString strPathUserProfile,CMenu *mainMnu,CToolBar *pToolBar,CString strIDToolBar1,CToolBar *pToolBar2,CString strIDToolBar2,CToolBar *pToolBar3,CString strIDToolBar3,CToolBar *pToolBar4,CString strIDToolBar4,CToolBar *pToolBar5,CString strIDToolBar5,CToolBar *pToolBar6,CString strIDToolBar6){ SetUserId(usrID,strPathUserProfile); Attach(mainMnu,pToolBar,pToolBar2,pToolBar3,pToolBar4,pToolBar5,pToolBar6,strIDToolBar1,strIDToolBar2,strIDToolBar3,strIDToolBar4,strIDToolBar5,strIDToolBar6); } void CFgMenuCfg::RemoveAllSeparator(){ int count = pMenu->GetMenuItemCount(); for (int i = 0; i < count; i++){ RemoveAllSeparatorFromSubMenu(pMenu,i); if(pMenu->GetMenuItemID(i) == ID_SEPARATOR){ pMenu->DeleteMenu(i,MF_BYPOSITION); } } RemoveAllSeparatorFromButton(pToolBar); RemoveAllSeparatorFromButton(pToolBar2); RemoveAllSeparatorFromButton(pToolBar3); RemoveAllSeparatorFromButton(pToolBar4); RemoveAllSeparatorFromButton(pToolBar5); RemoveAllSeparatorFromButton(pToolBar6); } //Remove separator from menu void CFgMenuCfg::RemoveAllSeparatorFromSubMenu(CMenu *pMenu,int posMenu){ pSubMenu =pMenu->GetSubMenu(posMenu); UINT n=0; UINT nID=0; for (n =0; n < pSubMenu->GetMenuItemCount(); n++){ nID = pSubMenu->GetMenuItemID( n ); if(nID == 0 && (n == 0 || n == pSubMenu->GetMenuItemCount()-1)){ pSubMenu->DeleteMenu( n--, MF_BYPOSITION ); } if(n > 0 && nID == 0 && pSubMenu->GetMenuItemID( n-1 ) == 0 ){ pSubMenu->DeleteMenu( n--, MF_BYPOSITION ); } } int nMnu=pSubMenu->GetMenuItemCount(); if(nMnu > 0){ nID = pSubMenu->GetMenuItemID( nMnu-1 ); if(nID == ID_SEPARATOR){ pSubMenu->DeleteMenu( nMnu-1 , MF_BYPOSITION ); } } } int CFgMenuCfg::SearchStrIDMnu(CString strIdMenu){ int nIndexMax=Count(); CfgMenuItemClass *pElement=NULL; for(int nIndex=0;nIndexGetIdStrMenu()==strIdMenu) return nIndex; } } return -1; } bool CFgMenuCfg::SetButtonPos(int posButton,CString strIdMenu,CString strIdToolBar){ bool sts=false; int nIndex=SearchStrIDMnu(strIdMenu); if(nIndex != -1){ m_cfgMenuItems[nIndex].SetPosButton(posButton,strIdToolBar); sts=true; } return sts; } void CFgMenuCfg::ParserResource() { CDlgFGCfgMenu *dlgFGCfgMenu= new CDlgFGCfgMenu(); dlgFGCfgMenu->Create(IDD_DLG_CFGMENU,NULL); dlgFGCfgMenu->m_pMenuCfg=this; dlgFGCfgMenu->ShowWindow(TRUE); CStdioFile fileRC; CString msgErr; CString strRow; CString strMenu; CString strNomeIDrisorsa; BOOL bMainMenu=FALSE; BOOL bSubMenu=FALSE; int nPosMenu=0; int nPopLevel=0; //m_strFileRC="C:\\testmnu\\testmnu.rc"; OnLoadResource(); if(!fileRC.Open(m_strFileRC,CFile::modeRead)){ msgErr.Format("Errore: Impossibile aprire il file %s",m_strFileRC); AfxMessageBox(msgErr); } int nToken=0; int nPos=0; for(;;){ nPos=0; if(fileRC.ReadString(strRow)==FALSE) break; nToken=ParseRow(strRow,nPos); if(nToken==eToken::eCOMMENT){ continue; } if(nToken==eToken::eINCLUDE){ continue; } if(nToken==eToken::eMENU){//Processo IDR_MAINFRAME strMenu=GetToken(strRow,eMENU,nPos); if(strMenu=="IDR_MAINFRAME"){ bMainMenu=TRUE; }else{ bMainMenu=FALSE; bSubMenu=FALSE; } continue; } if(bMainMenu){ //Processo POPUP (menu 1° livello) if(nToken==eToken::ePOPUP){ strMenu=GetToken(strRow,ePOPUP,nPos); if(!strMenu.IsEmpty()){ //AfxMessageBox(strMenu); bSubMenu=TRUE; nPosMenu=0; //tmpMenuCfg.SetMenuItem(strMenu,0,0,nPosMenu,-1,0,0); SetMenuItem(strMenu,0,0,nPosMenu,-1,0,0); if(nPopLevel==0){ dlgFGCfgMenu->hMenuLevel1[dlgFGCfgMenu->nIndexMenuL1]=dlgFGCfgMenu->m_MenuTree.InsertItem(strMenu); dlgFGCfgMenu->m_MenuTree.SetItemColor(dlgFGCfgMenu->hMenuLevel1[dlgFGCfgMenu->nIndexMenuL1], RGB(192, 64, 0)); SetHitem(strMenu,dlgFGCfgMenu->hMenuLevel1[dlgFGCfgMenu->nIndexMenuL1]); dlgFGCfgMenu->nIndexMenuL1++; } if(nPopLevel==1){ dlgFGCfgMenu->hMenuLevel2[dlgFGCfgMenu->nIndexMenuL2]=dlgFGCfgMenu->m_MenuTree.InsertItem(strMenu,dlgFGCfgMenu->hMenuLevel1[dlgFGCfgMenu->nIndexMenuL1-1]); dlgFGCfgMenu->m_MenuTree.SetItemColor(dlgFGCfgMenu->hMenuLevel2[dlgFGCfgMenu->nIndexMenuL2], RGB(0, 0, 255)); SetHitem(strMenu,dlgFGCfgMenu->hMenuLevel2[dlgFGCfgMenu->nIndexMenuL2]); dlgFGCfgMenu->nIndexMenuL2++; } nPosMenu++; nPopLevel++; } } } if(bSubMenu){ if(nToken==eToken::eEND){ nPopLevel--; if(nPopLevel==0) bSubMenu=FALSE; }else{ if(nToken==eToken::eMENUITEM){ strMenu=GetToken(strRow,ePOPUP,nPos); if(!strMenu.IsEmpty()){ //AfxMessageBox(strMenu); nToken=ParseRow(strRow,nPos); if(nToken==eToken::eCOMMA){ strNomeIDrisorsa=GetToken(strRow,eCOMMA,nPos); if(strNomeIDrisorsa.IsEmpty()){ //new line ... leggo la riga sottostante if(fileRC.ReadString(strRow)==FALSE) break; strNomeIDrisorsa=strRow; strNomeIDrisorsa.TrimRight(); strNomeIDrisorsa.TrimLeft(); } //AfxMessageBox(strNomeIDrisorsa); } SetMenuItem(strMenu,0,0,nPosMenu,-1,0,0,strNomeIDrisorsa); if(nPopLevel==1){ dlgFGCfgMenu->hMenuLevel2[dlgFGCfgMenu->nIndexMenuL2]=dlgFGCfgMenu->m_MenuTree.InsertItem(strMenu,dlgFGCfgMenu->hMenuLevel1[dlgFGCfgMenu->nIndexMenuL1-1]); dlgFGCfgMenu->m_MenuTree.SetItemColor(dlgFGCfgMenu->hMenuLevel2[dlgFGCfgMenu->nIndexMenuL2], RGB(0, 0, 255)); SetHitem(strMenu,dlgFGCfgMenu->hMenuLevel2[dlgFGCfgMenu->nIndexMenuL2]); dlgFGCfgMenu->nIndexMenuL2++; } if(nPopLevel==2){ dlgFGCfgMenu->hMenuLevel3[dlgFGCfgMenu->nIndexMenuL3]=dlgFGCfgMenu->m_MenuTree.InsertItem(strMenu,dlgFGCfgMenu->hMenuLevel2[dlgFGCfgMenu->nIndexMenuL2-1]); dlgFGCfgMenu->m_MenuTree.SetItemColor(dlgFGCfgMenu->hMenuLevel3[dlgFGCfgMenu->nIndexMenuL3], RGB(32, 64, 192)); SetHitem(strMenu,dlgFGCfgMenu->hMenuLevel3[dlgFGCfgMenu->nIndexMenuL3]); dlgFGCfgMenu->nIndexMenuL3++; } nPosMenu++; } } } } } fileRC.Close(); //2° Passaggio, toolbar if(!fileRC.Open(m_strFileRC,CFile::modeRead)){ msgErr.Format("Errore: Impossibile aprire il file %s",m_strFileRC); AfxMessageBox(msgErr); } bool bToolBar=FALSE; int posButton=0; CString strIdToolBar; for(;;){ nPos=0; if(fileRC.ReadString(strRow)==FALSE) break; nToken=ParseRow(strRow,nPos); if(nToken==eToken::eTOOLBAR){ strIdToolBar=GetToken(strRow,eMENU,nPos); if(!strIdToolBar.IsEmpty()){ bToolBar=TRUE; continue; } } if(bToolBar){ if(nToken==eToken::eEND){ strIdToolBar=""; bToolBar=FALSE; posButton=0; } if(nToken==eToken::eSEPARATOR){ posButton++; } if(nToken==eToken::eBUTTON){ nPos+=6; strNomeIDrisorsa=GetToken(strRow,eCOMMA,nPos); if(!strNomeIDrisorsa.IsEmpty()){ //Cerco la posizione nel menu... SetButtonPos(posButton,strNomeIDrisorsa,strIdToolBar); posButton++; } } } } //Abilito tutto e espando tutto dlgFGCfgMenu->ExpandAll(); //OnSaveMenu(); //SaveToFile(m_strFileMNU); } int CFgMenuCfg::ParseRow(CString strRow,int &nPos){ int nPosIni=0; //Cerco commenti nPosIni=strRow.Find("//",nPos); if(nPosIni != -1){ nPos=0; return eToken::eCOMMENT; } //Cerco include nPosIni=strRow.Find("#",nPos); if(nPosIni != -1){ nPos=0; return eToken::eINCLUDE; } //Cerco Menu: nPosIni=strRow.Find(" MENU ",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eMENU; } //Cerco POPUP: nPosIni=strRow.Find(" POPUP ",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::ePOPUP; } //Cerco MENUITEM: nPosIni=strRow.Find(" MENUITEM ",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eMENUITEM; } //Cerco BEGIN: nPosIni=strRow.Find("BEGIN",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eBEGIN; } //Cerco END: nPosIni=strRow.Find("END",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eEND; } //Cerco TOOLBAR: nPosIni=strRow.Find(" TOOLBAR ",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eTOOLBAR; } //Cerco SEPARATOR: nPosIni=strRow.Find("SEPARATOR",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eSEPARATOR; } //Cerco BUTTON: nPosIni=strRow.Find("BUTTON",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eBUTTON; } //Cerco Virgolette nPosIni=strRow.Find("\"",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eVIRGOLETTE; } //Cerco COMMA: nPosIni=strRow.Find(",",nPos); if(nPosIni != -1){ nPos=nPosIni; return eToken::eCOMMA; } nPos=0; return eNONE; } CString CFgMenuCfg::GetToken(CString strRow,eToken eTk,int &nPos){ CString strResult; int nToken=0; strResult=""; if(eTk==eToken::eMENU){ strResult=strRow.Mid(0,nPos); strResult.TrimLeft(); strResult.TrimRight(); } if(eTk==eToken::ePOPUP){ nPos++; nToken=ParseRow(strRow,nPos); if(nToken==eToken::eVIRGOLETTE){ strResult=GetToken(strRow,eSTRINGA,nPos); strResult.TrimLeft(); strResult.TrimRight(); } } if(eTk==eToken::eSTRINGA){ int posIni=nPos; nPos++; nToken=ParseRow(strRow,nPos); if(nToken==eToken::eVIRGOLETTE){ strResult=strRow.Mid(posIni+1,nPos-posIni-1); strResult.TrimLeft(); strResult.TrimRight(); nPos++; } } if(eTk==eToken::eCOMMA){ nPos++; strResult=strRow.Mid(nPos); strResult.TrimLeft(); strResult.TrimRight(); } return strResult; } void CFgMenuCfg::DeleteButton(CfgMenuItemClass* pTmpItem,CToolBar *pTmpToolBar,CString strIDToolBar){ int i=0; if(strIDToolBar=="IDR_MAINFRAME1") int j=0; if( pTmpItem != NULL && pTmpToolBar!=NULL){ if(pTmpItem->GetStyleButton()==0 && pTmpItem->GetPosButton()!=-1){ if(pTmpItem->GetIdStrToolBar() == strIDToolBar){ pTmpToolBar->GetToolBarCtrl().DeleteButton(pTmpItem->GetPosButton()); pTmpToolBar->GetParentFrame()->RecalcLayout(); } //Reset buttons position for(i=0; i < m_nItems; i++){ if((m_cfgMenuItems[i].GetIdStrToolBar() == strIDToolBar) && (pTmpItem->GetIdStrToolBar()==strIDToolBar)){ if(m_cfgMenuItems[i].GetPosButton() > pTmpItem->GetPosButton()){ m_cfgMenuItems[i].ShiftLeftPosButton(); } } } } } } //Remove separator from menu and button void CFgMenuCfg::RemoveAllSeparatorFromButton(CToolBar *pToolBar){ int n=0; UINT nID=0; UINT nStyle=0; int iImage =0; UINT nIDprev=0; if(pToolBar!=NULL){ for (n =0; n < pToolBar->GetToolBarCtrl().GetButtonCount(); n++){ pToolBar->GetButtonInfo(n,nID,nStyle,iImage); if(nID == ID_SEPARATOR && (n == 0 || n == pToolBar->GetToolBarCtrl().GetButtonCount()-1)){ pToolBar->GetToolBarCtrl().DeleteButton(n--); } if(n > 0 && nID == 0){ pToolBar->GetButtonInfo(n-1,nIDprev,nStyle,iImage); if(nIDprev == ID_SEPARATOR){ pToolBar->GetToolBarCtrl().DeleteButton(n--); } } } //Elimino l'ultimo separatore ... int nBtn=pToolBar->GetToolBarCtrl().GetButtonCount(); if(nBtn > 0){ nIDprev=-1; pToolBar->GetButtonInfo(nBtn-1,nIDprev,nStyle,iImage); if(nIDprev == ID_SEPARATOR){ pToolBar->GetToolBarCtrl().DeleteButton(nBtn-1); } } } } void CFgMenuCfg::OnLoadResource(){ CString m_strDest; char BASED_CODE szInputFilter[] = "File di risorsa (*.rc) |"; CFileDialog wndInputFileDlg ( TRUE, NULL, "*.rc", OFN_LONGNAMES | OFN_EXPLORER | OFN_NOVALIDATE | OFN_NOCHANGEDIR, szInputFilter ); wndInputFileDlg.m_ofn.Flags|=OFN_EXPLORER | OFN_HIDEREADONLY; if(wndInputFileDlg.DoModal () == IDOK ){ m_strFileRC=wndInputFileDlg.GetPathName(); } } CString CFgMenuCfg::OnSaveMenu(){ CString strFileMNU; char BASED_CODE szInputFilter[] = "File MNU (*.mnu) |"; CFileDialog wndInputFileDlg ( FALSE, NULL, "*.mnu", OFN_LONGNAMES | OFN_EXPLORER | OFN_NOVALIDATE | OFN_NOCHANGEDIR, szInputFilter ); strcpy(wndInputFileDlg.m_ofn.lpstrFile,"_CFGMENU"); wndInputFileDlg.m_ofn.Flags|=OFN_EXPLORER | OFN_HIDEREADONLY; if(wndInputFileDlg.DoModal () == IDOK ){ strFileMNU=wndInputFileDlg.GetPathName()+".MNU"; } return strFileMNU; } //Fine. void CFgMenuCfg::SetHitem(CString strIdMenu,HTREEITEM nItem){ bool sts=false; int nIndex=FindByName(strIdMenu); //nIndex=SearchStrIDMnu(strIdMenu); if(nIndex != -1){ m_cfgMenuItems[nIndex].SetHitemButton(nItem); } } //Save informations contents to ASCII FILE BOOL CFgMenuCfg::SaveToFile(CString strNameFile,CTreeCtrlEx *pTree){ if(pTree == NULL) return false; //Read Information from files... CStdioFile fileOUT; CString strRow; BOOL bOpen=fileOUT.Open(strNameFile,CFile::modeCreate|CFile::modeWrite,NULL); int stsMenu=0,stsBar=0; if(bOpen){ int nIndex=0; for(nIndex=0; nIndexGetCheck(nItem); stsBar=pTree->GetCheck(nItem); }else{ stsMenu=m_cfgMenuItems[nIndex].GetStyleMenu(); stsBar=m_cfgMenuItems[nIndex].GetStyleButton(); } strRow.Format("{%03d}{%-50s}{%2d}{%2d}{%2d}{%2d}{%2d}{%2d}{%-100s}{%-100s}\n", nIndex, m_cfgMenuItems[nIndex].GetName(), m_cfgMenuItems[nIndex].GetIdMenu(), m_cfgMenuItems[nIndex].GetIdButton(), m_cfgMenuItems[nIndex].GetPosMenu(), m_cfgMenuItems[nIndex].GetPosButton(), //m_cfgMenuItems[nIndex].GetStyleMenu(), //m_cfgMenuItems[nIndex].GetStyleButton(), stsMenu, stsBar, m_cfgMenuItems[nIndex].GetIdStrMenu(), m_cfgMenuItems[nIndex].GetIdStrToolBar()); fileOUT.WriteString(strRow); } fileOUT.Close(); } return bOpen; }