Problem beim Verarbeiten von Werten einer Textbox



  • Hallo,
    ich habe eine Textbox erstellt in die der User etwas (bzw. eine Zahl) eingibt. Jetzt will ich die Werte weiterverarbeiten. Das ganze sieht bis jetzt so aus:

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        PAINTSTRUCT ps;
        static HDC hdc;
    	static HWND hEdit[10];
    	int arr[4];
    	char buffer[256];
    	int Breite, Höhe, Vert, Hor, Tief, Kugeln;
    	char kug[256];
    
        switch (message)
        {
    	case WM_COMMAND:
    
    		switch(wParam)
    		{
    		case 1:
    
    			SendMessage(hEdit[1], WM_GETTEXT, 256, (LPARAM)buffer);
    			Breite = atoi( buffer );
    
    			SendMessage(hEdit[2], WM_GETTEXT, 256, (LPARAM)buffer);
    			Höhe = atoi( buffer );
    
    			SendMessage(hEdit[3], WM_GETTEXT, 256, (LPARAM)buffer);
    			Vert = atoi( buffer );
    
    			SendMessage(hEdit[4], WM_GETTEXT, 256, (LPARAM)buffer);
    			Hor = atoi( buffer );
    
    			SendMessage(hEdit[5], WM_GETTEXT, 256, (LPARAM)buffer);
    			Tief = atoi( buffer );
    
    			Kugeln = ((Höhe+1)*2)*(Breite+1);
    
    			itoa(Kugeln, kug, 256);
    
    			MessageBoxA(hWnd, kug, "Kugeln", MB_OK);
    
    			break;
    
    		}
    
    		break;
    	case WM_CREATE:
    		hEdit[1] = CreateWindowEx(WS_EX_CLIENTEDGE, _T("edit"), NULL,
    				WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT,
    				170, 20, 100, 22,
                    hWnd, (HMENU) 2005,
                    (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
    
    		hEdit[2] = CreateWindowEx(WS_EX_CLIENTEDGE, _T("edit"), NULL,
    				WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT,
    				170, 45, 100, 22,
                    hWnd, (HMENU) 2004,
                    (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
    
    		hEdit[3] = CreateWindowEx(WS_EX_CLIENTEDGE, _T("edit"), NULL,
    				WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT,
    				170, 70, 100, 22,
                    hWnd, (HMENU) 2003,
                    (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
    
    		hEdit[4] = CreateWindowEx(WS_EX_CLIENTEDGE, _T("edit"), NULL,
    				WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT,
    				170, 95, 100, 22,
                    hWnd, (HMENU) 2002,
                    (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
    
    		hEdit[5] = CreateWindowEx(WS_EX_CLIENTEDGE, _T("edit"), NULL,
    				WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT,
    				170, 120, 100, 22,
                    hWnd, (HMENU) 2001,
                    (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
    
    		hEdit[6] = CreateWindowA("Button","Berechnen",
    				BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,5,150,100,25,hWnd,(HMENU)1,(HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE),0);
    
    		break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
    		TextOutA(hdc,5,22,"Breite (Felder):", 16);
    		TextOutA(hdc,5,48,"Höhe (Felder):", 14);
    		TextOutA(hdc,5,72,"Vertikal-Rohre (cm):", 20);
    		TextOutA(hdc,5,96,"Horizontal-Rohre (cm):", 22);
    		TextOutA(hdc,5,120,"Tiefe-Rohre (cm):", 17);
    
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
            break;
        }
    
        return 0;
    }
    

    Gebe ich jetzt in das Feld Breite 1 ein und in Höhe auch, dann kommt 8 raus, ist ja auch richtig. Gebe ich aber in beide Felder 2 ein, dann sagt die MessageBox mir "i". Das ist bei allen anderen Zahlen auch so (nur mit anderen Buchstaben) auser eben bei 1,1.
    Wie kann man das lösen?

    MFG!



  • Bitte, kann mir jemand helfen? Ist dringend!


  • Mod

    Leg Dir eigene Controls an als Static oder Edit Control (dann evtl. mit ES_READONLY) und verwende GetDlgItemInt und SetDlgItemInt, wenn es Dir um ints geht.

    Ansonsten solltest Du Dir erstmal klar werden das man einen int erstmal in einen char-Array umwandeln muss bevor man in mit TextOut ausgeben kann.

    Ich würde Dir aber eher raten zu Controls zu greifen.


Anmelden zum Antworten