Fenster schließt sich sofort.



  • Ich bin neu in C++ und habe angefangen mit einem ganz Simplen Fenster.
    Ich weiß nicht an was es liegt, dass das Fenster immer gleich zu geht.

    Hier ist mein Code:

    LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam){
    
    	PAINTSTRUCT ps;
    	HDC			hdc;
    
    	//Nachrichtenverwaltung
    
    	switch(msg){
    		case WM_CREATE:
    			{
    				return 0;
    			}
    			break;
    
    		case WM_PAINT:
    			{
    			hdc = BeginPaint(hWnd, &ps);
    			EndPaint(hWnd, &ps);
    			return 0;
    			}
    			break;
    
    		case WM_DESTROY:
    			{
    				PostQuitMessage(0);
    				return 0;
    			}
    			break;
    
    		default:
    			break;
    	}
    
    	return DefWindowProc(hWnd, msg, wparam, lparam);
    }
    
    //////////////////////////////////////////////////////
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR cmdLine, int nShowCmd){
    
    	WNDCLASSEX  winclass;
    	HWND		hWnd;
    	MSG			msg;
    
    	//Struct für Fenstereigenschaften festlegen
    	winclass.cbSize = sizeof(WNDCLASSEX); //Größe im Arbeitsspeicher von WNDCLASSEX
    	winclass.style = CS_HREDRAW | CS_VREDRAW;
    	winclass.lpfnWndProc = WindowProc; //Oben erstellt
    	winclass.cbClsExtra = 0;
    	winclass.cbWndExtra = 0;
    	winclass.hInstance = hInstance;
    	winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    	winclass.lpszMenuName = _T(WINDOW_CLASS_NAME);
    	winclass.lpszClassName = _T(WINDOW_CLASS_NAME);
    	winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
    	hInstanceApp = hInstance; //Globale Instance wird gesetzt
    
    	if(!RegisterClassEx(&winclass))
    		return -1; //Fehler Fenster konnte nicht registriert werden.
    
    	if(!(hWnd = CreateWindowEx(NULL, 
    							  _T(WINDOW_CLASS_NAME), 
    							  _T("MyWindowTitle"), 
    							  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    							  0,0,
    							  800, 600,
    							  NULL,
    							  NULL,
    							  hInstance,
    							  NULL)));
    		return -1; //Fenster konnte nicht erstellt werden
    
    	mainWindowHandle = hWnd; //Setzen des Globalen Fenster Handles
    
    	Game_Init();
    
    	while(TRUE) //Nachrichtenweiterleitung
    	{
    		if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) //Holt die Nachrichten heraus zum schauen ob etwas drinnen ist
    		{
    			if(msg.message = WM_QUIT)
    				break;
    
    			TranslateMessage(&msg);
    			DispatchMessage(&msg); //Leitet message an die CALLBACK weiter (macht windows)
    		}
    		Game_Main();
    	}
    	Game_Shutdown(); //Wenn fertig
    
    	MessageBox(NULL, _T("Return"), _T("Title"), MB_OK);
    	return(msg.wParam);
    
    }
    

    Kann mir vll. da wer weiterhelfen. Bin den Code schon durchgegangen. Und keine Angst die ganzen Game Funktionen sind leer bis auf Game_Main das wartet auf ESCAPE.

    void Game_Main(void){
    	if(KEYDOWN(VK_ESCAPE))
    		SendMessage(mainWindowHandle, WM_CLOSE, 0, 0); //Wenn ESCAPE dann beenden 
    }
    


  • Kurze Antwort: Du hast einen Zeiger nicht initialisiert, der von der RegisterClassEx()-Funktion benötigt wird.



  • Denk' noch einmal über diese zwei Zeilen in deiner Nachrichtenschleife nach:

    if(msg.message = WM_QUIT) // Zuweisung  :warning: 
      break;
    

    Edit: Außerdem dürfte der CPU-Hunger recht hoch sein, da du ständig PeekMessage aufrufst. Also entweder noch ein WaitMessage(); einbauen oder gleich (wenn du keine Filterung der Nachrichten benötigst) GetMessage verwenden.

    Edit 2: Ganzen Text innerhalb von cpp-Tags geschrieben...



  • danke vielmals ist einleutchtend dass das ned Zuweisung ist... Hab so oft drüber gelesen 😞
    Naja danke 🙂


Anmelden zum Antworten