StackOverflow?
-
Guten Abend.
Ich versuche mich seit einiger Zeit an der Programmierung mit C++. Um diese zu erlernen eschäftige ich mich mit dem Buch "C++ für Spieleprogrammierer", da es mir zum Grundlagenlernen empfohlen wurde. Leider habe ich jetzt ein Problem, welches ich nicht ausfindig machen kann.
Hier zu erstmal der Code:
Deklarationen:
#include <windows.h> LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ); HWND ErstelleHauptfenster(HINSTANCE hInstance); void ErstelleSteuerelemente(HWND hWnd, HINSTANCE hInstance); const char szClassName[] = "MyClassEx"; char szTitle[] = "First Programm"; #define ID_STATICTEXT 4000; #define ID_EDITBOX 4001; #define ID_UEBERNEHMEN 4002; #define ID_BEENDEN 4003; HWND hText; HWND hEditBox; HWND hUebernehmen; HWND hBeenden;
WinMain:
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow ) { HWND hWnd; MSG msg; hWnd = ErstelleHauptfenster(hInstance); ErstelleSteuerelemente(hWnd,hInstance); while ( GetMessage( &msg, NULL, 0, 0)){ TranslateMessage( &msg ); DispatchMessage( &msg ); } return (int)(msg.wParam); }
WndProc:
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){ switch( msg ) { case WM_DESTROY: PostQuitMessage(0); return (0); break; case WM_COMMAND: switch (wParam) { case 4002: { char szText[256]; GetWindowText(hEditBox, szText, 256); SetWindowText(hText,szText); SetWindowText(hEditBox, ""); return (0); } case 4003: { int Resultat; Resultat = MessageBox(hWnd,"Wirklich beenden?", "Beenden", MB_YESNO|MB_ICONQUESTION); if(Resultat == IDYES) { PostQuitMessage(0); return (0); } return(0); } } }//switch return WndProc(hWnd,msg,wParam,lParam); }
Und zu guter letzt, Funktionen um Fenster und Childs zu erstellen:
HWND ErstelleHauptfenster(HINSTANCE hInstance) { HWND hWnd; WNDCLASSEX WndClassEx; //======== REGISTRIERUNG ========// WndClassEx.cbSize = sizeof( WNDCLASSEX ); WndClassEx.style = CS_HREDRAW|CS_VREDRAW; WndClassEx.lpfnWndProc = WndProc; WndClassEx.cbClsExtra = 0; WndClassEx.cbWndExtra = 0; WndClassEx.hInstance = hInstance; WndClassEx.hIcon = LoadIcon(NULL,IDI_APPLICATION); WndClassEx.hCursor = LoadCursor(NULL,IDC_ARROW); WndClassEx.hbrBackground = ( HBRUSH ) ( COLOR_BACKGROUND + 1 ); WndClassEx.lpszMenuName = NULL; WndClassEx.lpszClassName = szClassName; // C-String WndClassEx.hIconSm = NULL; if(!RegisterClassEx( &WndClassEx )) { MessageBox(NULL,"Register Class failed", "Error", MB_OK); return (NULL); }; hWnd = CreateWindowEx( NULL, szClassName, szTitle, WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 135, NULL, NULL, hInstance, NULL ); return(hWnd); } void ErstelleSteuerelemente(HWND hWnd, HINSTANCE hInstance) { HMENU hMenu1 = (HMENU)ID_STATICTEXT; HMENU hMenu2 = (HMENU)ID_EDITBOX; HMENU hMenu3 = (HMENU)ID_UEBERNEHMEN; HMENU hMenu4 = (HMENU)ID_BEENDEN; hText = CreateWindow("STATIC","Eingegebener Text",WS_VISIBLE|WS_CHILD|ES_CENTER,0,0,300,20,hWnd,hMenu1,hInstance,NULL); hEditBox = CreateWindow("EDIT","Bitte Text eingeben", WS_VISIBLE|WS_CHILD|WS_BORDER,0,20,300,20,hWnd,hMenu2,hInstance,NULL); hUebernehmen = CreateWindow("BUTTON", "Übernehmen", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,20,50,95,40,hWnd,hMenu3,hInstance,NULL); hBeenden = CreateWindow("BUUTON", "Beenden", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,175,50,95,40,hWnd,hMenu3,hInstance,NULL); }
Nun zum Fehler:
Versuche ich dieses Programm nun zu kompielieren erscheinen folgende Fehler:
Unbehandelte Ausnahme bei 0x01301529 in Grafics.exe: 0xC00000FD: Stack overflow.Leider kann ich mit diesem Fehler nichts anfangen und würde nun gerne um eure Hilfe bitten.
Ich hoffe Sie/Ihr könnt mir helfen. Mfg. Revnik
-
schreib mal am ende deiner nachrichtenschleife beim rückgabewert
::DefWindowProc und nicht WndProc. ich denke das ist dein fehler. was anderes ist mir imo. nicht aufgefallen.
-
Füge noch die fehlende Variable char szText[256] hinzu.
-
Danke LowFly hat geklappt