Menü nicht da



  • Hallo ich bin gerade WinAPI am lernen mit dem Buch "Windows Programmierung" von Microsoft und dem Compiler Dev-C++ + Eclipse und habe ein Problem.
    Ich habe was aus dem Buch nachprogrammiert hier die Quellcodes:
    menudemo.cpp

    #include <windows.h>
    #include "resource.h"
    
    #define ID_TIMER 1
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    TCHAR szAppName[] = TEXT("Menu Demo");
    
    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)){
    		MessageBox(NULL, TEXT("Programmfehler"), szAppName, MB_ICONERROR);
    		//MessageBox(NULL, TEXT("Programmfehler"), WS_OVERLAPPEDWINDOWS, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hIntance, NULL);	
    	}
    
    	hwnd = CreateWindow(szAppName, TEXT("Programmfehler"), 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){
    	static int idColor[5] = {WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH};
    	static int iSelection = IDM_BKGND_WHITE;
    
    	HMENU	hMenu;
    	hMenu = GetMenu(hwnd);
    
    	switch(message){
    		case WM_COMMAND:
    			switch(LOWORD(wParam)){
    				case IDM_FILE_NEW:
    				case IDM_FILE_OPEN:
    				case IDM_FILE_SAVE:
    				case IDM_FILE_SAVE_AS:
    					MessageBeep(0);
    					return 0;
    
    				case IDM_APP_EXIT:
    					SendMessage(hwnd, WM_CLOSE, 0, 0);
    					return 0;
    
    				case IDM_EDIT_UNDO:
    				case IDM_EDIT_CUT:
    				case IDM_EDIT_COPY:
    				case IDM_EDIT_PAST:
    				case IDM_EDIT_CLEAR:
    					MessageBeep(0);
    					return 0;
    
    				case IDM_BKGND_WHITE:
    				case IDM_BKGND_LTGRAY:
    				case IDM_BKGND_GRAY:
    				case IDM_BKGND_DKGRAY:
    				case IDM_BKGND_BLACK:
    					CheckMenuItem(hMenu, iSelection, MF_UNCHECKED);
    					iSelection = LOWORD(wParam);
    					CheckMenuItem(hMenu, iSelection, MF_CHECKED);
    
    					SetClassLong(hwnd, GCL_HBRBACKGROUND, (LONG) GetStockObject(idColor[LOWORD(wParam) - IDM_BKGND_WHITE]));
    
    					InvalidateRect(hwnd, NULL, TRUE);
    					return 0;
    
    				case IDM_TIMER_START:
    					if(SetTimer(hwnd, ID_TIMER, 1000, NULL)){
    						EnableMenuItem(hMenu, IDM_TIMER_START, MF_GRAYED);
    						EnableMenuItem(hMenu, IDM_TIMER_STOP, MF_ENABLED);
    					}
    					return 0;
    
    				case IDM_TIMER_STOP:
    					KillTimer(hwnd, ID_TIMER);
    					EnableMenuItem(hMenu, IDM_TIMER_START, MF_ENABLED);
    					EnableMenuItem(hMenu, IDM_TIMER_STOP, MF_GRAYED);
    					return 0;
    
    				case IDM_APP_HELP:
    					MessageBox(hwnd, TEXT("Hilfestellung noch nicht implentiert."), szAppName, MB_ICONEXCLAMATION | MB_OK);
    					return 0;
    
    				case IDM_APP_ABOUT:
    					MessageBox(hwnd, TEXT("Hilfestellung noch nicht implentiert."), szAppName, MB_ICONINFORMATION | MB_OK);
    					return 0;
    			}
    			break;
    
    		case WM_TIMER:
    			MessageBeep(0);
    			return 0;
    
    		case WM_DESTROY:
    			PostQuitMessage(0);
    			return 0;
    	}
    
    	return DefWindowProc(hwnd, message, wParam, lParam);
    }
    

    resource.h

    #define IDM_FILE_NEW					40001
    #define IDM_FILE_OPEN					40002
    #define IDM_FILE_SAVE					40003
    #define IDM_FILE_SAVE_AS				40004
    #define IDM_APP_EXIT					40005
    #define IDM_EDIT_UNDO					40006
    #define IDM_EDIT_CUT					40007
    #define IDM_EDIT_COPY					40008
    #define IDM_EDIT_PAST					40009
    #define IDM_EDIT_CLEAR					40010
    #define IDM_BKGND_WHITE					40011
    #define IDM_BKGND_LTGRAY				40012
    #define IDM_BKGND_GRAY					40013
    #define IDM_BKGND_DKGRAY				40014
    #define IDM_BKGND_BLACK					40015
    #define IDM_TIMER_START					40016
    #define IDM_TIMER_STOP					40017
    #define IDM_APP_HELP					40018
    #define IDM_APP_ABOUT					40019
    

    menudemo.rc

    #include "resource.h"
    #include "afxres.h"
    
    MENUDEMO MENU DISCARDABLE
    BEGIN
    	POPUP "&Datei"
    	BEGIN
    		MENUITEM "&Neu",				IDM_FILE_NEW
    		MENUITEM "&Öffnen",				IDM_FILE_OPEN
    		MENUITEM "&Speichern",			IDM_FILE_SAVE
    		MENUITEM "Speichern &unter",	IDM_FILE_SAVE_AS
    		MEMUITEM SEPERATOR
    		MENUITEM "B&enden",				IDM_APP_EXIT
    	END
    	POPUP "&Bearbeiten"
    	BEGIN
    		MENUITEM "&Widerrufen",			IDM_EDIT_UNDO
    		MENUITEM SEPERATOR
    		MENUITEM "A&usschneiden",		IDM_EDIT_CUT
    		MENUITEM "&Kopieren",			IDM_EDIT_COPY
    		MENUITEM "E&infügen",			IDM_EDIT_PAST
    		MENUITEM "&Löschen",			IDM_EDIT_CLEAR
    	END
    	POPUP "&Hintergrund",
    	BEGIN
    		MENUITEM "&Weiß",				IDM_BKGND_WHITE, CHECHED
    		MENUITEM "&Hellgrau",			IDM_BKGND_LTGRAY
    		MENUITEM "&Grau"				IDM_BKGND_GRAY
    		MENUITEM "&Dunkelgrau"			IDM_BKGND_DKGRAY
    		MENUITEM "&Schwarz"				IDM_BKGND_BLACK
    	END
    	POPUP "&Timer"
    	BEGIN
    		MENUITEM "&Start"				IDM_TIMER_START
    		MENUITEM "&Stop"				IDM_TIMER_STOP, GRAYED
    	END
    	POPUP "&Hilfe"
    	BEGIN
    		MENUITEM "&Hilfe"				IDM_APP_HELP
    		MENUITEM "I&nfo"				IDM_APP_ABOUT
    	END
    END
    

    Wenn ich das ganze Compilieren und ausführe habe ich zwar ein Windowsfenster aber kein Menü.



  • hi, Also:
    in deinem Code fehlt...

    _____________________________________________________________________________
    1.:

    wndclass.lpszMenuName   = szAppName;
    

    wird zu:

    wndclass.lpszMenuName   = MAKEINTRESOURCE(MENUDEMO);
    

    _____________________________________________________________________________
    2.: (nicht unbedingt nötig, aber sinnvoll!)

    HMENU hMenu;
    hMenu = GetMenu(hwnd);
    

    wird zu:

    static HMENU hMenu;
    // der Init unter WM_CREATE:
    case WM_CREATE:
        // ...
        hMenu = GetMenu(hwnd);
        // ...
        break;
    

    _____________________________________________________________________________

    MfG CodeFinder

    PS: Bin mir nicht ganz sicher, aber in MVC++ muss du alles dem Projekt hinzufügen!



  • So gehts auch:

    HMENU hMenu;
    hMenu = MAKEINTRESOURCE (MENUDEMO);
    


  • Also mit anderen Worten im Buch steht mist? jetzt verstehe ich warum windows so ka.. läuft 😃

    Das Menü ist aber trozdem nicht da



  • Welches Buch hast Du denn?

    Hier mal ein Tutorial zum Umgang mit Menüs:

    http://pronix.linuxdelta.de/C/win32/win32_4.shtml

    Aber von dem linuxdelta nicht verwirren lassen.. 🕶



  • Ich habe denn Code übernommen aber es gibt kein Menü



  • Microsoft Visual C++ => Neues Projekt => Win32 Anwendung => Standard Einstellungen lassen!

    Damit erstellt der die eine nette bsp. Anweundung, mit Menü... könnt ihr euch mal im selber Fehlerfinden trainieren...



  • Ich kann mit Microsoft Visual C++ aber nur Konsolenanwendungen erstellen



  • lord_fritte schrieb:

    Ich kann mit Microsoft Visual C++ aber nur Konsolenanwendungen erstellen

    oho, wieso ?

    MfG CodeFinder

    PS: Hassu meine Tipps mal probiert ?



  • CodeFinder schrieb:

    lord_fritte schrieb:

    Ich kann mit Microsoft Visual C++ aber nur Konsolenanwendungen erstellen

    oho, wieso ?

    MfG CodeFinder

    PS: Hassu meine Tipps mal probiert ?

    Ja geht alles nicht



  • Seid wann kann jemand nur Konsolen Anwendungen erstellen?! Das ist jawohl stuss schlecht hin...

    Welche Version(VC++) ?!



  • Dier hier Ich hatte vergessen PSDK zu installieren 😃



  • ζσζ

    hatte mich schon gewundert



  • Wenn ich jetzt aber eine Widows Anwendung neu erstelle und das Projekt so lasse wie es ist und das Compiliere bekomm ich einen Fehler:

    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'winwlm.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macwin32.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macwin32.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macwin32.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macwin32.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macwin32.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macwin32.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'rpcerr.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'rpcmac.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macname1.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macpub.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macapi.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Test2 : warning PRJ0041 : Fehlende Abhängigkeit 'macname2.h' für Datei 'Test2.rc' kann nicht gefunden werden. Das Projekt kann zwar erstellt werden, ist aber erst dann aktuell, wenn die Datei gefunden wurde.
    
    Die temporäre Datei "c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\RSP00000139001436.rsp" wird erstellt. Inhalt:
    [
    /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp"Debug\Test2.pch" /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /c /Wp64 /ZI /TP ".\Test2.cpp"
    ]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\RSP00000139001436.rsp" /nologo /errorReport:prompt"Die temporäre Datei "c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\RSP00000239001436.rsp" wird erstellt. Inhalt:
    [
    /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yc"stdafx.h" /Fp"Debug\Test2.pch" /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /c /Wp64 /ZI /TP ".\stdafx.cpp"
    ]Erstellen der Befehlszeile "cl.exe @"c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\RSP00000239001436.rsp" /nologo /errorReport:prompt"Erstellen der Befehlszeile "rc.exe /d "_UNICODE" /d "UNICODE" /fo"Debug/Test2.res" ".\Test2.rc""Die temporäre Datei "c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\TMP00000339001436.tmp" wird erstellt. Inhalt:
    [
    1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ ".\\Debug\\Test2.exe.embed.manifest"
    ]Erstellen der Befehlszeile "rc.exe /fo".\Debug\Test2.exe.embed.manifest.res" "c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\TMP00000339001436.tmp""
    Die temporäre Datei "c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\RSP00000439001436.rsp" wird erstellt. Inhalt:
    [
    /OUT:"C:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Debug\Test2.exe" /INCREMENTAL /MANIFEST /MANIFESTFILE:"Debug\Test2.exe.intermediate.manifest" /DEBUG /PDB:"c:\dokumente und einstellungen\tobias\eigene dateien\visual studio 2005\projects\test2\debug\Test2.pdb" /SUBSYSTEM:WINDOWS /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
    
    ".\debug\stdafx.obj"
    
    ".\debug\Test2.obj"
    
    ".\debug\Test2.res"
    
    ".\Debug\Test2.exe.embed.manifest.res"
    ]Erstellen der Befehlszeile "link.exe @"c:\Dokumente und Einstellungen\Tobias\Eigene Dateien\Visual Studio 2005\Projects\Test2\Test2\Debug\RSP00000439001436.rsp" /NOLOGO /ERRORREPORT:PROMPT"
    

Anmelden zum Antworten