[C++] InsertMenuItem

Anbrix

Mitglied
Morgen zusammen =)

Ich habe ein Problem bei der Menuveränderung @ runtime.
Zeige ich euch am besten erstmal Codeauschnitte:

Resource:
Code:
IDR_POPUP_MENU MENU
BEGIN
    POPUP "POPUP"
    BEGIN
        MENUITEM "Item 1"
        MENUITEM SEPERATOR
        POPUP "Sub 1"
            MENUITEM SEPERATOR
            MENUITEM "Item 2"
        END
        MENUITEM "Item 3"
        MENUITEM "Item 4"
        MENUITEM "Item 5"
    END
END

(Natürlich haben die ganzen MENUITEM's (außer SEPERATOR) auch ID's, tut nur hier nichts zur Sache, daher habe ich sie nicht mit abgeschrieben ^.^

Das Popupmenu wird auch vollständig und funktionstüchtig angezeigt.
Nun möchte ich aber @ runtime im Untermenu Sub 1 Items hinzufügen.
Tätigen sollte dies folgender Code:

Code:
bool AddPluginMenuItem(pluginstruct * plugin){
    size_t size = plugin->personal_menu.size(); 
    if(size){
        HMENU menu = GetSubMenu(LoadMenu(hInst, MAKEINTRESOURCE(IDR_POPUP_MENU)), 0);
        HMENU sub = NULL;
        MENUITEMINFOA mii;
        mii.cbSize = sizeof(MENUITEMINFOA);
        int i = 0, j = GetMenuItemCount(menu);
        char name[64] = {0};
        while(i<j){
            GetMenuStringA(menu, i, name, sizeof(name), MF_BYPOSITION);
            if(memcmp(name, "Sub 1", strlen(name) == 0){
                sub = GetSubMenu(menu, i);
                break;
            }
            memset(name, 0, sizeof(name));
            ++i;
        }
        if(sub == NULL) MessageBoxA(0, "FATAL ERROR", "ERROR", MB_ICONERROR);
        else{
            mii.fMask = MIIM_SUBMENU | MIIM_STRING | MIIM_ID;
            mii.wID = 0x00008888; // nur provisorisch, das handling im dlgproc kommt noch, geht ja erstmal nur um anzeige
            mii.hSubMenu = sub;
            mii.dwTypeData = (char*)plugin->PluginName;
            if(InsertMenuItemA(sub, 0, TRUE, &mii) == 0)
                AlertLastError(GetLastError());  // Zeigt eine MessageBox
            if(DrawMenuBar(hWnd) == 0)
                AlertLastError(GetLastError());
        }
    }
    return true;
}

Habe mir es in Olly angeguckt, er geht in den else-Block von "sub == NULL" wie er soll.
Zur kurzen Erklärung - falls mein provisorischer Code Fragen aufwirbelt: bei "Sub 1" soll ein weiteres POPUP item eingefügt werden mit dem Pluginnamen, und (das ist jetzt noch nicht im obrigen Code) dann in diesem Submenu die Menüpunkte welche in plugin->personel_menu Vector stehen.

Nun das Problem:
Er macht nix :confused: gar nichts .. Das Menü sicht nach wie vor gleich aus, und GetLastError wird nicht aufgerufen, die Funktionen InsertMenuItem und DrawMenuBar schlagen also keinen Fehler zurück ... ich bin ratlos :S

Weiß einer was der Fehler sein könnte ?
Danke im Vorraus

MfG
 
Hab den Fehler mitlerweile gefunden, ist allerdings zu verdreht um eine kurze Erklärung abzugeben, und der Fehler hat auch nix mit den Menufunktionen im obrigen Code (auch wenn dieser doch noch fehlerhaft sein möge ^.^) zu tun.
 
Zurück