000
14.08.2004, 14:02 Uhr
~tie
Gast
|
Hallo,
ich habe mir was gebastelt, womit ich ein Menü dynamisch erzeugen kann, indem ich die Einträge aus einer Datei auslese.
C++: |
BOOL CMainFrame::CreateMenus() { bool bSubMenu = false; int iZeile = 0; unsigned int iID = first_ID + 1; CStdioFile fDatei; CString sPath = m_config.GetConfigDir() + "Programm.cfg"; //Gibt zu öffnende Datei wieder CString sZeile, sZeile_old;
CMenu MainMenu, Menu; CMenu *subMenu = new CMenu; subMenu->CreatePopupMenu(); Menu.CreatePopupMenu();
//einlesen der richtigen Dateistruktur und speichern der Untermenüs in subMenu[x] if (fDatei.Open( sPath, CFile::modeRead)) { while( fDatei.ReadString(sZeile) || (! sZeile.IsEmpty())) { sZeile.TrimLeft(); sZeile.TrimRight(); if (sZeile.Left(1) == ".") { if (sZeile.Left(2) == "..") { bSubMenu = true; subMenu->AppendMenu(MF_STRING,iID++,sZeile); } else { if (bSubMenu) { Menu.AppendMenu(MF_BYPOSITION | MF_POPUP, (unsigned int)subMenu->GetSafeHmenu(), sZeile_old); subMenu = new CMenu; subMenu->CreatePopupMenu(); } else Menu.AppendMenu(MF_STRING,iID++,sZeile); sZeile_old = sZeile; bSubMenu = false; } } iZeile++; } } fDatei.Close(); if (bSubMenu) Menu.AppendMenu(MF_BYPOSITION | MF_POPUP, (unsigned int)subMenu->GetSafeHmenu(), sZeile_old); else Menu.AppendMenu(MF_STRING,iID++,sZeile_old);
MainMenu.LoadMenu(IDR_MAINFRAME);//das Hauptmenü MainMenu.InsertMenu(2, MF_BYPOSITION | MF_POPUP, (UINT)Menu.GetSafeHmenu(), "Dateneingabe"); SetMenu(&MainMenu); MainMenu.Detach();//Recource wieder freigeben Menu.Detach(); return true; }
|
Nur leider sind die neuen Menüeinträge alle grau. Also habe ich ein wenig gestöbert und gefunden, das ich dies mir der EnableMenuItem() ändern kann. Hab ich mir gedacht, ich ändere
subMenu->AppendMenu(MF_STRING,iID++,sZeile);
in
subMenu->AppendMenu(MF_STRING,iID,sZeile); tempMenu = subMenu->GetSubMenu(subMenu->GetMenuItemCount()-1); tempMenu->EnableMenuItem(iID++, MF_ENABLED);
Doch Essig wars, tempMenu (Zeiger auf CMenu) erhält den Wert 0 und und bei EnableMenuItem stürzt er dann ab. Wie muss ich da richtig rangehen? |