2 Menüs??



  • Geht das? Ich poste mal den quelltext...
    resource.rc:

    #include "resource.h"
    /**********************************Menü-Anfang****************************************/
    MENUDEMO MENU DISCARDABLE 
    BEGIN
        POPUP "&Datei"                                         //Obermenüname
        BEGIN                                                  //& vor Buchst.=Unterstr., f. Abk.
            MENUITEM "&Neu",             IDM_FILE_NEW          //Menüitem, Konstantenname
            MENUITEM SEPARATOR                                 //Trennlinie
            MENUITEM "B&eenden",         IDM_APP_EXIT          //Menüitem, Konstantenname
        END
    END
    /**********************************Menü-Ende*******************************************/
    /*******************************Pop-Menü-Anfang****************************************/
    POPUPMENUDEMO MENU DISCARDABLE
    BEGIN
        POPUP "MyMenu"
        BEGIN
            POPUP "&Bearbeiten"                                //Untermenü
            BEGIN
                MENUITEM "&Undo",       IDM_EDIT_UNDO          //Menüitem, Konstantenname
                MENUITEM "&Redo",       IDM_EDIT_REDO          //Menüitem, Konstantenname
            END
        END
    END
    /*******************************Pop-Menü-Ende******************************************/
    

    resource.h:

    #define IDM_FILE_NEW    40001                  //Konstantenname, Kennziffer
    #define IDM_APP_EXIT    40002                  //Konstantenname, Kennziffer
    #define IDM_EDIT_UNDO   40003                  //Konstantenname, Kennziffer
    #define IDM_EDIT_REDO   40004                  //Konstantenname, Kennziffer
    

    main:

    #include <windows.h>
    #include "resource.h"
    HINSTANCE hInst;
    TCHAR szAppName[]=TEXT("Menudemo");
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         HWND     hwnd ;
         MSG      msg ;
         WNDCLASS wndclass ;
    
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = szAppName ;
         wndclass.lpszClassName = szAppName ;
    
         if (!RegisterClass (&wndclass))
         {    // UNICODE-Compilierung ist die einzige realistische Fehlermöglichkeit 
              MessageBox (NULL, TEXT ("Programm arbeitet mit Unicode und setzt Windows NT voraus!"), 
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         hInst=hInstance;
         hwnd = CreateWindow (szAppName, szAppName,
                              WS_OVERLAPPEDWINDOW,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
    
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
    
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HMENU         hMenu1 ;
         static HMENU  hMenu2 ;
         POINT         p;
    
         switch (message)
         {
         case WM_CREATE:
             hMenu2 = LoadMenu (hInst, szAppName) ;
             hMenu2 = GetSubMenu (hMenu2, 0) ;
             return 0;
         case WM_RBUTTONUP:
             p.x=LOWORD(lParam);
             p.y=HIWORD(lParam);
             ClientToScreen(hwnd, &p);
             TrackPopupMenu(hMenu2, TPM_RIGHTBUTTON, p.x, p.y, 0, hwnd, NULL);
             return 0;
         case WM_COMMAND:
              hMenu1 = GetMenu (hwnd) ;
    
              switch (LOWORD (wParam))
              {
              case IDM_FILE_NEW:
                  MessageBeep (0) ;
                  return 0 ;
              case IDM_APP_EXIT:
                  SendMessage (hwnd, WM_CLOSE, 0, 0) ;
                  return 0 ;
              case IDM_EDIT_UNDO:
                  MessageBeep (0) ;
                  return 0 ;
              case IDM_EDIT_REDO:
                  MessageBeep (0) ;
                  return 0 ;
              };
              break;
         case WM_DESTROY:
             PostQuitMessage (0) ;
             return 0 ;
         };
         return DefWindowProc (hwnd, message, wParam, lParam);
    };
    

    Wie man sieht (nach dem compilieren + linken) Hat das Kontextmenu den selben inhalt wie das normale menu... 😞



  • Hat jemand eine Idee?



  • 😞 😞 Och Menno... 😞 👎



  • bist du dumm? du kannst doch nicht nach einer stunde schon ne antwort verlangen.

    👎



  • Und warum probiesrt du es nicht einfach aus?



  • wenn du beide Male den gleichen Name angibst, ist das doch nicht verwunderlich 😕



  • @flenders:
    Wo geb ich 2 mal den selben Name an?
    Zeig mal bitte! Wie kann ich auswählen welches Menu gemeint ist? (Die heißen doch unterschiedlich, oder?)



  • ness schrieb:

    wndclass.lpszMenuName  = szAppName ;
    // [...]
    hMenu2 = LoadMenu (hInst, szAppName) ;
    


  • OK, nun weiß ich schon mal wo mein Fehler liegt...
    Aber wie kann ich das ändern? Irgendwie würde ich am liebsten eine Konstante in resource.h definieren, aber wie? (Ich mag keine Ansprache per string...)
    Oder hab ich da was komplett falsch verstanden?



  • Hast du denn POPUPMENUDEMO nicht schon als Konstante definiert?! Dann sollte es eigentlich funktionieren, wenn du einfach anstelle von szAppName bei LoadMenu MAKEINTRESOURCE(POPUPMENUDEMO) verwendest 🙂



  • Ach dieses MAKEINTORESOURCE...
    Naja, klingt logisch! Aber warum muss man das wann benutzen? Bei Zahlen kann man ja ein '#' davorstellen, und wenn ich die Konstanten in der Header definiere, gehts auch ohne...


Anmelden zum Antworten