Menüressource einbinden, Menu laden
-
Hallo zusammen
Ich versuche mich gerade an Menüs mit WinAPI, aber da ich nur die Express-Edition von MSVC++ habe, habe ich keinen eingebauten Ressourcen-Editor. Deshalb wollte ich die Menuressource von Hand erstellen und anschliessend in die EXE hineinkompilieren lassen (rc.exe ist ja vorhanden). Allerdings wird meine Ressource nicht geladen, und ich weiss nicht warum. Hier mal mein Code:
resource.rc:
#include <windows.h> #include "resource.h" IDM_MENU MENU DISCARDABLE BEGIN POPUP "&Datei" BEGIN MENUITEM "&Speichern", IDM_SAVE MENUITEM SEPARATOR MENUITEM "&Beenden", IDM_QUIT END ENDresource.h:
#ifndef RESOURCE_H #define RESOURCE_H #define IDM_MENU 101 #define IDM_SAVE 102 #define IDM_QUIT 103 #endifund schliesslich in meinem sourcecode (main.cpp):
//Fensterklasse initialisieren, registrieren usw.: HWND hwnd; MSG msg; WNDCLASS wndclass; LPCWSTR szAppName = TEXT("Template"); wndclass.style = CS_VREDRAW | CS_HREDRAW; wndclass.cbClsExtra = NULL; wndclass.cbWndExtra = NULL; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor = LoadCursorW(NULL, IDC_ARROW); wndclass.hIcon = LoadIconW(NULL, IDI_APPLICATION); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WndProc; wndclass.lpszClassName = szAppName; wndclass.lpszMenuName = szAppName; if (!RegisterClassW(&wndclass)) { MessageBoxW(NULL, TEXT("Fensterregistrierungsfehler"), TEXT("Error"), NULL); return EXIT_FAILURE; } hwnd = CreateWindowW(szAppName, TEXT(""), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); /* SNIP */ //WndProc: static HMENU hMenu; switch(message) { case WM_CREATE: hMenu = GetMenu(hwnd); if(!hMenu) { MessageBox(hwnd, TEXT("no menu"),TEXT ("Error"), MB_OK|MB_ICONWARNING); SendMessage(hwnd, WM_CLOSE, wParam, lParam); } break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_SAVE: MessageBeep(0); return 0; case IDM_QUIT: SendMessage(hwnd, WM_CLOSE, 0, 0); return 0; } break;Das Problem ist, hMenu wird immer NULL, d.h. das Menü wird anscheinend nicht eingebunden. Der Ressourcen-Compiler beschwert sich nicht....
Hat jemand eine Idee was ich vergessen / übersehen habe? Vielen Dank schonmal...
-
du musst das menü noch zuweisen:
wndclass.lpszMenuName = MAKEINTRESOURCE(IDM_MENU);
-
Ups, danke sehr!
