unbekannter Fehler



  • Ich habe mal ein kleines Programm geschrieben.
    So leider muss ich nach jedem Programmstart über den Taskmanager den prozess beenden.
    Da sonst im Debug Fenster steht, dass er die Datei Input.exe zum Schreiben nicht öffnen kann.

    Woran liegt das denn?

    Hier der Code der WinMain.cpp:

    #include <windows.h>
    #include "globales.h"
    #include <string.h>
    
    // Globales
    
    char szText[] = "Die NC 3D - Engine läuft!";
    HDC hdc;
    HWND hwnd;
    PAINTSTRUCT ps;
    int Laenge;
    bool action;
    
    // Callback Funktion -<
    LRESULT CALLBACK datastruct_Windowsklasse_callback (HWND hwnd,
    													UINT message,
    													WPARAM wparam,
    													LPARAM lparam)
    {
    
    	switch (message)
    	{
    	case WM_DESTROY:
    		{
    			PostQuitMessage(0);
    			return TRUE;
    		} break;
    	case WM_MOVE:
    		{
    
    			return TRUE;
    		} break;
    
    	default:break;
    	}
    
    	return (DefWindowProc (hwnd, message, wparam, lparam));
    } // >-Callback Funktion
    
    // WinMain - Funktion -<
    int WINAPI WinMain (HINSTANCE hinst,				
    					HINSTANCE hPrevInstance,
    					LPSTR	  lpCmdLine,
    					int		  nCmdShow)
    {
    	WNDCLASSEX		Windowsklasse;
    	MSG				message;
    	const char szKlassenname[] = "Klassenname";
    
    	Windowsklasse.cbSize			= sizeof(WNDCLASSEX);
    	Windowsklasse.style				= CS_HREDRAW | CS_VREDRAW;
    	Windowsklasse.lpfnWndProc		= datastruct_Windowsklasse_callback;
    	Windowsklasse.cbClsExtra		= 0;
    	Windowsklasse.cbWndExtra		= 0;
    	Windowsklasse.hInstance			= hinst;
    	Windowsklasse.hIcon				= LoadIcon (NULL, IDI_APPLICATION);
    	Windowsklasse.hCursor			= LoadCursor (NULL, IDC_ARROW);
    	Windowsklasse.hbrBackground		= (HBRUSH)GetStockObject(WHITE_BRUSH);
    	Windowsklasse.lpszMenuName		= NULL;
    	Windowsklasse.lpszClassName		= szKlassenname;
    	Windowsklasse.hIconSm			= LoadIcon (NULL, IDI_APPLICATION);
    
    	if (!RegisterClassEx (&Windowsklasse))
    	return FALSE;
    
    	if (!(hwnd = CreateWindowEx( NULL,
    								 szKlassenname,
    								 "NC_D3D-Engine - Titelleiste",
    								 WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    								 0,
    								 0,
    								 400,
    								 300,
    								 NULL,
    								 NULL,
    								 hinst,
    								 NULL)))
    	return FALSE;
    
    	action = FALSE;
    
    	Spiel_Initialisieren();
    
    	// Fenster vergrößert darstellen
    		ShowWindow( hwnd, SW_MAXIMIZE );
    
    	while (!action)
    	{
    
    		while (GetMessage (&message, NULL, 0, 0))
    		{
    			TranslateMessage (&message);
    			DispatchMessage (&message);
    		}
    
    	}
    
    	return message.wParam;
    
    	return 0;
    } // >-WinMain - Funktion 
    
    int Spiel_Initialisieren (void)
    {
    
    	MessageBox(hwnd, "sak", "sdjl", MB_OK);
    
    	return 1;
    }
    

    hier der der globales.h

    //#include <string.h>
    #include <windows.h>
    
    // Definitionen
    #define WIN32_LEAN_AND_MEAN
    
    #define SPIEL_MENUE			0
    #define SPIEL_START			1
    #define SPIEL_LAEUFT		2
    #define SPIEL_NEUSTART		3
    
    // Prototypen
    
    int Spiel_Initialisieren (void);
    int Spiel_Herunterfahren (void);
    int Textausgabe (HWND hwnd, HDC hdc, PAINTSTRUCT ps, char* szText, int Pos_x, int Pos_y, int Laenge); 
    bool NC_DI_Init(HINSTANCE hinst, PAINTSTRUCT ps, HDC hdc, HWND hwnd); 
    bool Text(HWND hwnd);
    int Spiel_initialisieren(void);
    

    Woran liegt das bloß?



  • liegts vielleicht an dem return?

    if (!(hwnd = CreateWindowEx( NULL, 
                                     szKlassenname, 
                                     "NC_D3D-Engine - Titelleiste", 
                                     WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
                                     0, 
                                     0, 
                                     400, 
                                     300, 
                                     NULL, 
                                     NULL, 
                                     hinst, 
                                     NULL))) 
        return FALSE; 
    
        action = FALSE;
    


  • Du musst action irgendwann auf TRUE setzen, damit er die while Schleife verlässt! Deine Message-Loop sieht aber eh etwas seltsam aus 🙄



  • Ja genau, action muss ich auf TRUE setzten, wenn ich die Nachricht: WM_DESTROY empfange.

    Danke


Anmelden zum Antworten