CreateWindowEx - Fehlercode 1400 ???
-
Hallo,
ich wollte mir gerade ebend ein Fenster mit der Winapi erzeugen lassen. Allerdings kriege ich beim Aufruf von CreateWindowEx den Fehlercode 1400 (INVALID_WINDOW_HANDLE). Ich habe damit ein Verständnisproblem: CreateWindowEx oder CreateWindow sollen doch genau den erzeugen oder? Wie kann das denn sein bzw. wie kann ich das lösen?
hier der Code:
HWND CreateMainWindow (HINSTANCE hInstance) { WNDCLASSEX wnd; (void)memset (&wnd, 0, sizeof (WNDCLASSEX)); wnd.cbSize = sizeof (WNDCLASSEX); wnd.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wnd.hCursor = LoadCursor (hInstance, IDC_ARROW); wnd.hInstance = hInstance; wnd.hIcon = LoadIcon (hInstance, IDI_APPLICATION); wnd.hIconSm = LoadIcon (hInstance, IDI_APPLICATION); wnd.lpfnWndProc = MessageHandler; wnd.lpszClassName = "sql"; wnd.lpszMenuName = NULL; wnd.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; if (!RegisterClassEx (&wnd)) { MessageBox (NULL, ERR_REGISTER, "FATAL ERROR", 64); return NULL; } hWindow = CreateWindowEx (NULL, "sql", "sql", WS_OVERLAPPEDWINDOW, 10,10, 640, 480, NULL, NULL, GetModuleHandle (NULL), NULL); if (!hWindow) { int error = GetLastError (); MessageBox (NULL, ERR_CREATE, "FATAL ERROR", 64); return NULL; } return hWindow; }Die Fensterklasse registrieren kann er (RegisterClassEx), allerdings kommt er in den Fall mit GetLastError () rein und liefert 1400 zurück.
Gruß Sebastian
-
Wie sieht MessageHandler aus?
-
LRESULT CALLBACK MessageHandler (HWND hWindow, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: break; case WM_DESTROY: PostQuitMessage (0); break; case WM_QUIT: PostQuitMessage (0); break; case WM_CLOSE: PostQuitMessage (0); break; default: return DefWindowProc (hWindow, message, wParam, lParam); } return -1; }
-
Hmmm ich dachte immer, die Callbackfunktion würde erst nach dem Erstellen des Fensters aufgerufen. Es war wohl das -1 am ende meiner Callbackfunktion. Allerdings so ganz nachvollziehen kann ich das nicht.
Naja es geht auf jedenfall. Danke für den Hinweis.
-
Deine Callback-Funktion ist völlig falsch.
1.) Auf WM_CREATE reagierst du durch das break mit -1.
WM_CREATE
If the application returns –1, the window is destroyed and the CreateWindowEx or CreateWindow function returns a NULL handle.
2.) Auf WM_QUIT wird nicht in nicht in der Window-Proc ankommen.
3.) Auf WM_CLOSE reagiert man mit DestroyWindow oder EndDialog (bei modalen Dialogen)
-
2.) Auf WM_QUIT wird nicht in nicht in der Window-Proc ankommen.
3.) Auf WM_CLOSE reagiert man mit DestroyWindow oder EndDialog (bei modalen Dialogen)
Was willst du?
-
Bei 2. hab ich mich wohl ein bisschen verschrieben, aber ich meinte das die WM_QUIT Message nicht in der Window-Proc ankommt.
-
Schau dir mal das Gerüst für ein standard Windows-Programm an
