An String von Menu Item kommen?
-
Hi, ich hab ein Popup-Menu und muss über die Item ID an den Text kommen.
Ich hab es mit GetMenuString probiert, aber geht nicht?
GetMenuString((HMENU)Item->hwndItem, Item->itemID, lpBuff2, 50, MF_BYPOSITION);
-
Dann solltest du die Doku dazu besser lesen: GetMenuString - schau dir die
flags
-Parameter genau an.
-
ohhhh, bin heute wieder besonders intelligent - sorry.
-
Ich habs jetzt mit MF_BYCOMMAND probiert aber wie bei MF_BYPOSITION bekomm ich nur einen leeren String??? Jetzt hab ich noch GetMenuItemInfo probiert, aber das bekomm ich auch nur einen leeren String zurück?
-
Und das MenuItem ist auch vom Typ
MFT_STRING
(s.a. "Return value" und "Remarks" in GetMenuString)?
-
Ja MF_STRING ist gesetzt. Aber ich bekomme nur einen leeren string.
-
Was ist denn der Rückgabewert dieser Funktion?
Und du bist dir sicher, daß dieitemID
auch paßt?
-
Ich tippe auf UNICODE (UTF-16) vs. Multibyte.
-
Die ItemID ist die die ich dem menüeintrag gegeben habe. Es stimmt alles aber funktioniert nicht?
-
@Swordfish: Ja, das hätte ich auch als nächstes gefragt, aber es fehlt immer noch die Antwort auf meine erste Frage bzgl. des Rückgabewerts (denn nur das ist entscheidend)...
@MikeDev: Und wenn du immer noch nicht weiterkommst, dann zeige mal den kompletten Codeausschnitt und wie du den String überrprüfst?
-
der rückgabewert ist immer 0.
-
@Mike85Dev sagte in An String von Menu Item kommen?:
der rückgabewert ist immer 0.
Der sicherste Weg hier ignoriert zu werden ist auf Anfragen keine Antwort zu geben. Th69 hat dich um Quelltext gebeten, nicht um das Ergebnis eines Funktionsaufrufs.
-
Doch, um beides.
Paßt denn auch der erste Parameter? Ist dies wirklich das Handle zu dem Menü? Denn der Name
hwndItem
und der Cast deuten nicht daraufhin...
Was istItem
denn für eine Struktur?
-
Das Popup Menu (alles kurz zusammengefasst)...
HMENU hMenu = CreatePopupMenu();
InsertMenu (hMenu, 1, MF_STRING | MF_BYPOSITION | MF_OWNERDRAW, 888, L"Test Eintrag");
TrackPopupMenu(hMenu, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, hwnd, NULL);und dann die abfrage...
case WM_DRAWITEM:
LPDRAWITEMSTRUCT Item = (LPDRAWITEMSTRUCT)lParam;
GetMenuString((HMENU)Item->hwndItem, Item->itemID, lpBuff, 50, MF_BYCOMMAND);
MessageBox(hwnd,lpBuff,NULL,0);
-
OK, scheint wohl das richtige Handle laut DRAWITEMSTRUCT zu sein.
Und wie ist
lpBuff
deklariert und initialisiert?Üblicherweise würde man es so programmieren:
TCHAR buff[50] = { 0 }; GetMenuString((HMENU)Item->hwndItem, Item->itemID, buff, sizeof(buff)/sizeof(buff[0]), MF_BYCOMMAND); MessageBox(hwnd, buff, NULL, MB_OK);
-
Genau so habe ich es auch initialisiert.
-
Mich hat nur der Prefix
lp
(long pointer) verwundert.Aber so langsam bin ich jetzt auch überfragt.
Klappt denn überhaupt das Auslesen, z.B.
GetMenuString((HMENU)Item->hwndItem, 0, buff, sizeof(buff)/sizeof(buff[0]), MF_BYPOSITION); // 1. Menüeintrag
?
-
Nein, klappt nicht.
-
Hast du denn mal den Wert von
hwndItem
jetzt überprüft, ob der dem Rückgabewert vonCreatePopupMenu
entspricht?Das sollte doch alles mittels Debuggen innerhalb von ein paar Minuten erledigt sein...
Edit: Und hast du beim Zeichnen denn auch den Typ abgefragt (
item->CtlType == ODT_MENU
)?
-
Ich würde als erstes mal probieren das direkt nach
InsertMenu
zum Laufen zu bekommen. Mit dem korrekten Handle. Und mich dann von dort aus weiterhanteln.
-
@Th69 ja hab geprüfte auf ODT_MENU und der Handle ist auch der selbe.