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
    END
    

    resource.h:

    #ifndef RESOURCE_H
    #define RESOURCE_H
    
    #define IDM_MENU 101
    #define IDM_SAVE 102
    #define IDM_QUIT 103
    
    #endif
    

    und 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! 👍


Anmelden zum Antworten