Mehrere Fenster erstellen: bricht beim Kompilieren ab!



  • Hi,

    immer wenn ich den Code kompilieren will, dann bricht das Programm ab.

    Hier mal der Code, ich hoffe ihr könnt mir helfen:

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK Mitte(HWND, UINT, WPARAM, LPARAM);
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	HWND hWindow;
    	MSG Message;
    	WNDCLASS WinClass;
    	const int BildschirmWidth = GetSystemMetrics(SM_CXSCREEN);
    	const int BildschirmHeight = GetSystemMetrics(SM_CYSCREEN);
    
    	memset(&WinClass, 0, sizeof(WNDCLASS));
    	WinClass.style = CS_DBLCLKS;
    	WinClass.lpfnWndProc = WndProc;
    	WinClass.hInstance = hInstance;
    	WinClass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
    	WinClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	WinClass.lpszClassName = "Das ist ein Testprogramm";
    		if(!RegisterClass(&WinClass))
    		{
    		return (FALSE);
    		}
    	hWindow = CreateWindow("Das ist ein Testprogramm", TEXT("Test"), WS_POPUPWINDOW, 0, 0, 
    		/*BildschirmWidth, BildschirmHeight,*/
    		700, 700, NULL, NULL, hInstance, NULL);
    	ShowWindow(hWindow, nCmdShow);
    	UpdateWindow(hWindow);
    
    		WNDCLASS WinMitte;
    	memset(&WinMitte, 0, sizeof(WNDCLASS));
    	WinMitte.style = CS_DBLCLKS;
    	WinMitte.lpfnWndProc = WndProc;
    	WinMitte.hInstance = hInstance;
    	WinMitte.hbrBackground = (HBRUSH) (RGB ( 128, 128, 128));
    	WinMitte.hCursor = LoadCursor(NULL, IDC_ARROW);
    	WinMitte.lpszClassName = "asd";
    		if(!RegisterClass(&WinMitte))
    		{
    		return (FALSE);
    		}
    
    		while(GetMessage(&Message, NULL, 0, 0))
    		{
    		TranslateMessage(&Message);
    		DispatchMessage(&Message);
    		}
    
    	return (Message.wParam);
    	}
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
    {
    
    	switch(uiMessage)
    	{
        case WM_COMMAND:
    	// Mitte Fenster (über Hintergrund): Das Menü
    	HWND WindowMitte;
    	WindowMitte = CreateWindow("Mitte", NULL, WS_CHILDWINDOW | WS_OVERLAPPEDWINDOW, 300, 200, 200, 100, NULL, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE), NULL);
    	ShowWindow(WindowMitte, SW_SHOW);
    	break;
    	case WM_LBUTTONDOWN:
    
    	break;
    
    	case WM_DESTROY:
    		PostQuitMessage(0);
    	break;
    
    	default:
    	return DefWindowProc(hWnd, uiMessage, wParam, lParam);
    	}
    }
    

    Ich weiß, der Code ist noch nicht das wahre, aber ich komm ja wegen dem Fehler nicht weiter.

    Danke schonmal!



  • Fehlermeldung?



  • hi
    also nach 10 minuten suche hab ich das Problem gefunden:
    in zeile 37 deines Quellcodes steht das hier:

    WinMitte.hbrBackground = (HBRUSH) (RGB ( 128, 128, 128));
    

    das erstellt wohl keinen richtigen HBRUSH, weshalb

    RegisterClass(&WinMitte)
    

    dann in zeile 40 fehlschlägt und dass Programm durch

    return FALSE;
    

    2 Zeilen später beendet wird, ohne wirklich gestartet zu haben...

    Lösung:

    Zeile 37 einfach durch das Ersetzen:

    WinMitte.hbrBackground = (HBRUSH)CreateSolidBrush( RGB( 128, 128, 128));
    

    dann wird durch CreateSolidBrush ein richtiger BRUSH erstellt und RegisterClass schlägt nicht fehl.

    kleiner Tipp noch, bevor deshalb der nächste Post kommt:
    du registrierst die Klasse WinMitte mit dem Namen "ads", deshalb muss CreateWindow in Zeile 63 fehlschlagen muss.
    und ich denke mal, dass du wohl eher WM_CREATE gemeint hast und nicht WM_COMMAND..? (WM_CREATE wird ein mal beim Programmstart gesendet und ist die erste Nachricht, die ein Programm bekommt... falls du das nicht wissen solltest)

    ich hoffe das hilft

    MFG


Anmelden zum Antworten