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