Angeklicktes PupupMenu-Item: Daten des Items herausbekommen.



  • Kann mir jemand sagen, wie so ich nicht an die ITEM-DATEN von angeklickten PopUp Menü Item komme? (Die Nachricht WM_MENUCOMMAND wird sicher aufgerufen, das weiß ich, nur die Daten bekomm ich nicht):

    case WM_MENUCOMMAND:
    {
    	MENUITEMINFO mii;
    	ZeroMemory(&mii, sizeof(MENUITEMINFO));
    	GetMenuItemInfo((HMENU)lParam, (UINT)wParam, true, &mii);
    	break;
    }
    


  • ZeroMemory(&mii, sizeof(MENUITEMINFO)); 
    mii.cbSize = sizeof(MENUITEMINFO);
    GetMenuItemInfo((HMENU)lParam, (UINT)wParam, true, &mii);
    


  • Hi nochmal! So klappts, nur komme ich immer noch nicht richtig an den "String" des Items, also wie das Item heißt.

    Das PopupMenü besteht aus 3 Items und 1 PopupItem!! Item 0 ist das PopupItem!

    case WM_MENUCOMMAND:
    		{
    			MENUITEMINFO mii;
    			char szText[MAX_PATH];
    			ZeroMemory(&mii, sizeof(MENUITEMINFO));
    			mii.cbSize = sizeof(MENUITEMINFO);
    			HMENU hMenu = GetSubMenu((HMENU)lParam, 0);
    			mii.fMask      = MIIM_STRING | MIIM_TYPE;
    			mii.fType      = MFT_STRING;
    			mii.cch        = MAX_PATH;
    			mii.dwTypeData = szText;
    			GetMenuItemInfo(hMenu, (UINT)wParam, true, &mii);
    			MessageBox(0, szText, 0, 0);
    			break;
    		}
    

    Das funktioniert immer nocht nicht. Irendwo liegt der Fehler, aber ich finde ihn nicht!! Ich möchte den String des Items ausgeben, das engeklickt wurde (nur die, die im PopupItem sind!!). Was mache ich falsch? Es kommen total falsche Werte an, also im Prinzip doch nix :>

    Danke im Voraus.
    Gurß!



  • GetLastError?



  • 87 The parameter is incorrect. ERROR_INVALID_PARAMETER



  • Liefert GetSubMenu das richtige Handle? Evtl. ist auch der GetMenuItemInfo Aufruf falsch! Wo kommt denn der Fehler (von GetLastError)?

    Specifies the zero-based index of the item selected.
    Windows 98/Me: The high word is the zero-based index of the item selected. The low word is the item ID.

    Hast du evtl. Windows 98/Me? Denn dann müsstest du ja HIWORD von wParam verwenden bzw. LOWORD und FALSE für fByPosition 🙄



  • Habs so versucht:

    case WM_MENUCOMMAND:
    		{
    			MENUITEMINFO mii;
    			char szText[MAX_PATH];
    			ZeroMemory(&mii, sizeof(MENUITEMINFO));
    			mii.cbSize = sizeof(MENUITEMINFO);
    			HMENU hMenu = GetSubMenu((HMENU)lParam, 0);
    			mii.fMask      = MIIM_TYPE;
    			mii.fType      = MFT_STRING;
    			mii.cch        = MAX_PATH;
    			mii.dwTypeData = szText;
    			GetMenuItemInfo(hMenu, (UINT)wParam, true, &mii);
    			int iError = GetLastError();
    			MessageBox(0, szText, 0, 0);
    			break;
    		}
    

    Fehler 87.

    Auch ohne das GetSubMenü funzts nich ://
    P.S.: ich und weniger wie XP? Nö! *g



  • Em Leude: es funzt. :>

    // Der Fehler lag hier:
    
    TrackPopupMenuEx(hMenu, TPM_LEFTBUTTON, pPoint.x, pPoint.y, hMainDlg, NULL);
    DestroyMenu(hMenu);
    

    Na? Bimmelts? Nö! Genau wie's bei mir net gleich geklingelt hat. Ich darf das Menü nicht gleich Destroyen, eigentlich logisch, aber übersehen!



  • looooool :p



  • autsch!



  • LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL


Anmelden zum Antworten