Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » dyn. Menü - Eintrage enablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: