Fensterhandle wird nicht initialisiert
-
Guten Abend liebe Community,
ich versuche mich nun, nach einiger Einarbeitungszeit in C++, mit der WinAPI.
Ich wollte nun das erste richtige Fenster erstellen und stoße dabei auf wahrscheinlich folgende Schwierigkeit, wie ich sie schon in der Überschrift benannt haben:Das Fensterhandle vom Typ HWND wird nicht initialisiert.
Ich habe folgenden Code geschrieben:
#include <Windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow) { const PWSTR szClassName = L"MeinFenster"; HWND hWnd; MSG msg; WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND +1; wc.lpszMenuName = NULL; wc.lpszClassName = szClassName; if(!RegisterClassEx(&wc)) { return 0; } hWnd = CreateWindowEx(NULL, szClassName, L"Mein erstes Fenster mit C++!", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 250, NULL, NULL, hInstance, NULL); if(hWnd == NULL) { return 0; } while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_DESTROY: { PostQuitMessage(0); return 0; } break; } return DefWindowProc(hWnd, message, lParam, wParam); }Und habe folgende Ausgabe:
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\user32.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\gdi32.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\lpk.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\usp10.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\msvcrt.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\advapi32.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\sechost.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\rpcrt4.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\sspicli.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\cryptbase.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\imm32.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\msctf.dll" geladen, Cannot find or open the PDB file
"WIN32_FirstWindow.exe": "C:\Windows\SysWOW64\uxtheme.dll" geladen, Cannot find or open the PDB file
Das Programm "[1840] WIN32_FirstWindow.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.Ein Fenster war nie zu sehen.
Da der Exit-Code gleich 0 ist, habe ich mir gedacht, dass entweder die Fensterklasse oder das Fensterhandle nicht richtig initialisiert wird.
Nach ein paar Versuchen mit dem Debugger war für mich klar, dass der Fehler beim Erstellen des Fensters, also beim initialisieren des Fensterhandles, auftreten muss.
Aber was mache ich falsch?
Bin ich einfach nur zu schusselig um den Fehler zu finden, oder bin ich zu nah am geschehen?
Ich denke mal beides! - Ich hoffe, dass ihr mir helfen könnt.Liebe Grüße und eine gute Nacht,
Cooter.
-
Wenn hWnd NULL ist, kontroliere was GetLastError sagt.
-
Sorry, aber könntest du mir da kurz Hilfestellung geben?
Was muss ich dafür machen?So etwas in der Art?
return GetLastError();
-
Der Fehler ist in dieser zeile:
return DefWindowProc(hWnd, message, lParam, wParam);muss lauten:
return DefWindowProc(hWnd, message, wParam, lParam);Gruß
-
Super - Danke.
Jetzt klappt auch alles.War wohl wirklich etwas zu schusselig

Nur zum Verständniss:
Gehe ich richtig mt der Annahme, dass der Fehler beim initialisieren des Fensters auftritt, weil gleichzeitig das Fenster erzeugt wird, dieses aber keine Nachrichten verarbeiten kann? Oder habe ich einen Fehler beim Debuggen gemacht?
-
Ich schätze mal. Es scheitert einfach, weil Windows die übergebenen Parameter als Fehler wertet und kein Handel zurückgibt.
-
Ok. Dann weiß ich bescheid

LG
Cooter