Benutzer mit den meisten Antworten
WINAPI Einstieg - Form öffnet sich nicht

Frage
-
Hallo,
Ich habe heute damit angefangen, mir die WINAPI ein bisschen näher anzuschauen.
Die Erstellung einer MessageBox lief noch ohne Probleme ab, jedoch öffnet sich bei meiner nächsten Aufgabe keine Form und ich weiß leider nicht wo das Problem liegt.
Hier ist der Code:
#define STRICT #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); const char szAppName[] = "Textausgabe im Anwendungsbereich"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; HWND hWnd; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName = TEXT("mfkads"); wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow(TEXT("HAH"), TEXT("JDASD"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }
Ich hoffe ihr könnt mir helfen ^^
Vielen Dank schonmal im Vorraus!MfG
TyingToCode
Antworten
-
Hi!
Gewöhne Dir an, Rückgabewerte zu prüfen. Im Fehlerfall liefert CreateWindow nämlich kein HWND, sondern NULL. Und wenn Du NULL erhälst, kannst Du mit GetLastError erfahren, was genau geklemmt hat. Des weiteren solltest Du im Fehlerfall gar nicht erst Deine Message-Pump laufen lassen, da diese sonst nicht beendet wird.
In Deinem speziellen Fall: CreateWindow erwartet als ersten Parameter den Namen einer registrierten Fensterklasse. Allerdings ist "HAH" keine solche. Versuch's stattdessen mal so:
hWnd = CreateWindow(wc.lpszClassName, TEXT("JDASD"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 20. Januar 2015 07:11
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 27. Januar 2015 09:25
Alle Antworten
-
Hallo,
vielleicht kann dir dieser Artikel weiterhelfen. Er erklärt das erstellen eines Fensters und gibt sogar Beispielcode: Erstellen von Win32-Anwendungen (C++)
© 2015 Thomas Roskop
Germany // Deutschland
-
Hi!
Gewöhne Dir an, Rückgabewerte zu prüfen. Im Fehlerfall liefert CreateWindow nämlich kein HWND, sondern NULL. Und wenn Du NULL erhälst, kannst Du mit GetLastError erfahren, was genau geklemmt hat. Des weiteren solltest Du im Fehlerfall gar nicht erst Deine Message-Pump laufen lassen, da diese sonst nicht beendet wird.
In Deinem speziellen Fall: CreateWindow erwartet als ersten Parameter den Namen einer registrierten Fensterklasse. Allerdings ist "HAH" keine solche. Versuch's stattdessen mal so:
hWnd = CreateWindow(wc.lpszClassName, TEXT("JDASD"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
- Als Antwort vorgeschlagen Martin RichterModerator Dienstag, 20. Januar 2015 07:11
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 27. Januar 2015 09:25