Fehler schon im Grundgerüst
-
Hallo.
Ich will grad ein Programm schreiben und habe das Grundgerüst erschaffen und schon da kommt ne Fehlermeldung.
Ich habe den Code 1 zu 1 aus dem Buch (Petzold) abgeschrieben und aus irgendeinem Grund wird die MessageBox, ausgelöst, die nach dem Registrieren der Fensterklasse bei einem Fehler kommt. Hier der Code#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[]=TEXT("MessageTest"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; if(!RegisterClass (&wndclass)) { MessageBox(NULL, TEXT("Fehler beim initialisieren."), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindow (szAppName, szAppName, WS_OVERLAPPEDWINDOW, 100, 100, 600, 400, 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_CREATE: return 0; case WM_PAINT: return 0; case WM_COMMAND: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }Wo ist denn da der Fehler? Oder liegt es eher an meinem PC?
Grüße
Max
-
memset(&wndclass,0,sizeof(wndclass)); mal davor machen bzw. wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
-
Du musst alle Elemente der Struktur 'WNDCLASS' besetzen. Die, die Du nicht explizit initialisierst, musst Du auf 0 setzen. Des weiteren solltest Du beim Element 'hbrBackground' einen Brush angeben, da Dein Fenster sonst keinen eigenen Hintergrund hat, da ist aber auch experimentieren gefragt
.
So geht es:#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[]=TEXT("MessageTest"); HWND hwnd; MSG msg; WNDCLASS wndclass = { 0 }; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.lpszClassName = szAppName; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); if(!RegisterClass (&wndclass)) { MessageBox(NULL, TEXT("Fehler beim initialisieren."), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindow (szAppName, szAppName, WS_OVERLAPPEDWINDOW, 100, 100, 600, 400, 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_CREATE: return 0; case WM_PAINT: return 0; case WM_COMMAND: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }
-
CodeFinder du bist zu lahm
-
Na eben.

Danke
-
CodeGrinder schrieb:
CodeFinder du bist zu lahm
Meine Erklärungen waren aber ausführlicher :p .