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ü erstelle

    hier 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


  • Mod

    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


  • Mod

    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


Anmelden zum Antworten