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, Kennziffermain:
#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...