Habn Problem mit Menüs
-
Hab für mein programm im Tray ein Menü erstellt nun mein code
[code] while (!m_recordset->ADOEOF) { char szText01[255]; my_String = _strdup((char*) ((_bstr_t)(m_recordset->GetFields()->GetItem(field)->GetValue())) ); sprintf(szText01,"%s",my_String); AppendMenu(hWin,MF_STRING,NULL,szText01); m_recordset->MoveNext(); } [/code]das funktioniert bissher ganz gut nur hab ich das problem
AppendMenu(hWin,MF_STRING,/*Id oben durch NULL dargestellt*/,szText01);das ich die id nicht hab , (nun was will ich eigentlich
)ich trage über diese abfrage internetadressen im menü ein diese sollen nun durch klick auf das menü durch ShellExecute aufgerufen werden mein problem weis net wie ich die adresse ohne id aufrufe , im Lisview mach ich das so[code] iSlected=SendMessage(hListEntry,LVM_GETNEXTITEM,-1,LVNI_FOCUSED); if(iSlected==-1) { MessageBox(hWnd,"No Items in Database","Error",MB_OK|MB_ICONINFORMATION); break; } memset(&lvi,0,sizeof(lvi)); lvi.mask=LVIF_TEXT; lvi.iSubItem=0; lvi.pszText=Text; lvi.cchTextMax=256; lvi.iItem=iSlected; SendMessage(hListEntry,LVM_GETITEMTEXT, iSlected, (LPARAM)&lvi); sprintf_s(szMessage,"%s",Text); ShellExecute(hWnd,"open",szMessage,NULL,NULL,SW_SHOW); [/code]hat einer ne idee wie ich das hinbekomm hab bisher mit menüs noch net sehr viel zu tun gehabt

THX im voraus
-
Du kannst mit SetMenuItemInfo() z.B. das Style MNS_NOTIFYBYPOS setzen.
Dann bekommst du statt WM_COMMAND eine WM_MENUCOMMAND und kriegst da den Index des angeklickten Menu-Items und kannst damit was anstellen...
-
[cpp] 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; } [/cpp]So ungefähr nur gibt er den text net aus

-
Ich hätte so geraten:
case WM_MENUCOMMAND: { char szText[MAX_PATH]; GetMenuString((HMENU)lParam,(UINT)wParam,szText,MAX_PATH,MF_BYPOSITION); MessageBox(0,szText,"blupp",MB_OK); break; }
-
Hab auch schon versucht wie mein oberes bsp. nur kommt kein text in der MSG Box

-
Kann keiner mehr helfen Funktioniert immer noch net
wäre für eure hilfe echt dankbar
-
Hmm, warum hast du da eigentlich GetSubMenu() drin?
case WM_MENUCOMMAND: { MENUITEMINFO mii; char szText[MAX_PATH]; ZeroMemory(&mii, sizeof(MENUITEMINFO)); mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_STRING | MIIM_TYPE; mii.fType = MFT_STRING; mii.cch = MAX_PATH; mii.dwTypeData = szText; GetMenuItemInfo((HMENU)lParam, (UINT)wParam, true, &mii); MessageBox(0, szText, 0, 0); break; }Passen denn die Rückgabewerte von GetMenuItemInfo()?
-
@geeky danke das du mir hilfst
Weis net so recht mit GetLastError bekomme ich fehler 87 beim debuggen bringt er kar keine meldung läuft sauber durch weis nemmer weiter vieleicht liegts ja auch darin wie ich mein menü erstellehier mal der code
[code] //Menü Aufruf Für Datenbank eintrag while (!m_recordset->ADOEOF) { char szText01[255]; my_String = _strdup((char*) ((_bstr_t)(m_recordset->GetFields()->GetItem(field)->GetValue())) ); sprintf(szText01,"%s",my_String); //Menü Eintrag anlegen // Im Programm aufgerufen mit // g_AccessDatabase.PrintFieldMenu(strTable, "Link", hMenu); AppendMenu(hWin,MF_STRING,NULL,szText01); m_recordset->MoveNext(); } [/code]Tray Menü Code im Programm
[code] case (WM_USER + 1): { switch(lParam) { case WM_LBUTTONUP: { hMenu = CreatePopupMenu(); // Mein Datenbank Aufruf g_AccessDatabase.Connect("Data/Database.mdb"); string strTable = "Linkpager"; // Meine Funktion zum einfügen der Links in das Menü g_AccessDatabase.PrintFieldMenu(strTable, "Link", hMenu); // Haupt menü zum steuern des Programms AppendMenu(hMenu,MF_SEPARATOR,NULL,NULL); AppendMenu(hMenu,MFT_STRING,IDOK,TEXT("Wiederherstellen")); AppendMenu(hMenu,MFT_STRING,IDCANCEL,TEXT("Beenden")); SetForegroundWindow(hWnd); GetCursorPos(&pt); TrackPopupMenu(hMenu, TPM_LEFTALIGN|TPM_TOPALIGN, pt.x, pt.y, 0, hWnd, NULL); PostMessage(hWnd, WM_NULL, 0, 0); } case WM_MENUCOMMAND: { MENUITEMINFO mii; char szText[MAX_PATH]; ZeroMemory(&mii, sizeof(MENUITEMINFO)); mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_STRING | MIIM_TYPE; mii.fType = MFT_STRING; mii.cch = MAX_PATH; mii.dwTypeData = szText; GetMenuItemInfo((HMENU)lParam, (UINT)wParam, true, &mii); MessageBox(0, szText, 0, 0); break; } } return 0; } [/code]hier die ausgabe der MessageBox Hier Fehler
hier das tray Menü ausgabe Hier Tray
-
Was sagt der Returnwert von GetMenuItemInfo?
Schon mal daran gedacht das, diese Funktion einen Fehler meldet?
-
wie bekom ich den return wert
sorry für die blöde frage
-
GetMenuItemInfo gibt doch einen Wert zurück! Welchen Wert?
-
er liefert einen int Wert zurück, mit dem Wert 1243088
sry
für die späte Antwort hab spätschicht und komm immer erst um die zeit nach haus zumindest diese woche