StackOverflow?



  • Guten Abend.

    Ich versuche mich seit einiger Zeit an der Programmierung mit C++. Um diese zu erlernen eschäftige ich mich mit dem Buch "C++ für Spieleprogrammierer", da es mir zum Grundlagenlernen empfohlen wurde. Leider habe ich jetzt ein Problem, welches ich nicht ausfindig machen kann.

    Hier zu erstmal der Code:

    Deklarationen:

    #include <windows.h>
    
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
    
    HWND ErstelleHauptfenster(HINSTANCE hInstance);
    void ErstelleSteuerelemente(HWND hWnd, HINSTANCE hInstance);
    
    const char szClassName[] = "MyClassEx";
    char szTitle[]     = "First Programm";
    
    #define ID_STATICTEXT 4000;
    #define ID_EDITBOX 4001;
    #define ID_UEBERNEHMEN 4002;
    #define ID_BEENDEN 4003;
    
    HWND hText;
    HWND hEditBox;
    HWND hUebernehmen;
    HWND hBeenden;
    

    WinMain:

    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
    				    LPSTR szCmdLine, int iCmdShow )
    {  
    
    	HWND	   hWnd;
    	MSG		   msg;
    
    	hWnd = ErstelleHauptfenster(hInstance);
    
    	ErstelleSteuerelemente(hWnd,hInstance);
    
    	while ( GetMessage( &msg, NULL, 0, 0)){
    
    		TranslateMessage( &msg );
    		DispatchMessage( &msg );
    
    	}
    
    	return (int)(msg.wParam);
    }
    

    WndProc:

    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){
    
    		switch( msg )
    		{
    		case WM_DESTROY:
    
    				PostQuitMessage(0);
    				return (0);
    				break;
    
    		case WM_COMMAND:
    			switch (wParam)
    			{
    			case 4002:
    				{
    					char szText[256];
    					GetWindowText(hEditBox, szText, 256);
    					SetWindowText(hText,szText);
    					SetWindowText(hEditBox, "");
    					return (0);
    
    				}
    			case 4003:
    				{
    					int Resultat;
    					Resultat = MessageBox(hWnd,"Wirklich beenden?", "Beenden", MB_YESNO|MB_ICONQUESTION);
    
    					if(Resultat == IDYES)
    					{
    						PostQuitMessage(0);
    						return (0);
    					}
    					return(0);
    
    				}
    			}
    
    		}//switch
    		return WndProc(hWnd,msg,wParam,lParam);
    
    	}
    

    Und zu guter letzt, Funktionen um Fenster und Childs zu erstellen:

    HWND ErstelleHauptfenster(HINSTANCE hInstance)
    	{
    		HWND hWnd;
    		WNDCLASSEX WndClassEx;
    
    			//======== REGISTRIERUNG ========//
    
    	WndClassEx.cbSize			= sizeof( WNDCLASSEX );
    	WndClassEx.style			= CS_HREDRAW|CS_VREDRAW;
    	WndClassEx.lpfnWndProc		= WndProc;
    	WndClassEx.cbClsExtra		= 0;
    	WndClassEx.cbWndExtra		= 0;
    	WndClassEx.hInstance		= hInstance;
    	WndClassEx.hIcon			= LoadIcon(NULL,IDI_APPLICATION);
    	WndClassEx.hCursor			= LoadCursor(NULL,IDC_ARROW);
    	WndClassEx.hbrBackground	= ( HBRUSH ) ( COLOR_BACKGROUND + 1 );
    	WndClassEx.lpszMenuName		= NULL;
    	WndClassEx.lpszClassName	= szClassName;			// C-String
    	WndClassEx.hIconSm			= NULL;
    
    	if(!RegisterClassEx( &WndClassEx ))
    	{
    		MessageBox(NULL,"Register Class failed", "Error", MB_OK);
    		return (NULL);
    	};
    
    	hWnd = CreateWindowEx( NULL,
    					szClassName,
    					szTitle,
    					WS_OVERLAPPEDWINDOW|WS_VISIBLE,
    					CW_USEDEFAULT,
    					CW_USEDEFAULT,
    					300,
    					135,
    					NULL,
    					NULL,
    					hInstance,
    					NULL );
    	return(hWnd);
    
    	}
    
    	void ErstelleSteuerelemente(HWND hWnd, HINSTANCE hInstance)
    	{
    		HMENU hMenu1 = (HMENU)ID_STATICTEXT;
    		HMENU hMenu2 = (HMENU)ID_EDITBOX;
    		HMENU hMenu3 = (HMENU)ID_UEBERNEHMEN;
    		HMENU hMenu4 = (HMENU)ID_BEENDEN;
    
    		hText = CreateWindow("STATIC","Eingegebener Text",WS_VISIBLE|WS_CHILD|ES_CENTER,0,0,300,20,hWnd,hMenu1,hInstance,NULL);
    
    		hEditBox = CreateWindow("EDIT","Bitte Text eingeben", WS_VISIBLE|WS_CHILD|WS_BORDER,0,20,300,20,hWnd,hMenu2,hInstance,NULL);
    
    		hUebernehmen = CreateWindow("BUTTON", "Übernehmen", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,20,50,95,40,hWnd,hMenu3,hInstance,NULL);
    
    		hBeenden = CreateWindow("BUUTON", "Beenden", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,175,50,95,40,hWnd,hMenu3,hInstance,NULL);
    	}
    

    Nun zum Fehler:
    Versuche ich dieses Programm nun zu kompielieren erscheinen folgende Fehler:
    Unbehandelte Ausnahme bei 0x01301529 in Grafics.exe: 0xC00000FD: Stack overflow.

    Leider kann ich mit diesem Fehler nichts anfangen und würde nun gerne um eure Hilfe bitten.

    Ich hoffe Sie/Ihr könnt mir helfen. Mfg. Revnik



  • schreib mal am ende deiner nachrichtenschleife beim rückgabewert
    ::DefWindowProc und nicht WndProc. ich denke das ist dein fehler. was anderes ist mir imo. nicht aufgefallen.



  • Füge noch die fehlende Variable char szText[256] hinzu.



  • Danke LowFly hat geklappt 🙂


Log in to reply