Mal wieder 'edit'



  • Hiho...
    Ich hab mal ne Frage zur Fensterklasse "EDIT"...
    ich hab nen edit erstellt mit CreateWindowEx(). An das Fenster schicke ich nun per SendMessage() nen WM_GETTEXT und speicher den Wert in einem int. Wenn ich mir nun im Debugger den Wert anschaue steht da drin: -858993460

    Weiß einer was das bedeutet ?
    Hier is nochmal der verwendete Code

    int len = SendMessage(hWndEdit01, WM_GETTEXTLENGTH, 0, 0);
    int buffer;
    SendMessage(hWndEdit01, WM_GETTEXT, len + 1 , (long)&buffer);
    

    Vll weiß ja einer Rat

    THX schomal vorweg.

    cu Laubi



  • Warum zum Teufel speicherst du den Text in einem int? Du brauchst einen TCHAR Buffer der GetWindowTextLength() + 1 groß sein muss. Zudem schickt man normalerweise nicht WM_GETTEXT sondern ruft GetWindowText wenn du den Text brauchst.



  • Mich verwirrt das irgendwie:

    int buffer;
    SendMessage(hWndEdit01, WM_GETTEXT, len + 1 , (long)&buffer);
    

    Du übergibst da nen Zeiger von "int buffer" und lässt da den Text hinkopieren ?

    Da du len eh nur direkt bei WM_GETTEXT weiterverwendest, könntest du auch einfach GetWindowText() benutzen...

    (war mal wieder lahm ;D)



  • wieso speicherst du eigentlich den Text in einer int Variablen?
    Benutze doch dafür wchar_t-(wenn du mit Unicode arbeitest) oder char-(wenn du mit Ansi arbeitest) Buffer.

    Wenn du den Text haben willst solltest aber auch wirklich nicht ne Message senden sonder GetWindowText benutzen (geht einfacher und schneller).

    Aber erkläre mal welchen Zweck das hatte, dass du den Text in ner int Variable speichern wolltest, denn ich kapiere das nicht 😮 , ist doch völliger Unsinn



  • jeanlebon schrieb:

    Aber erkläre mal welchen Zweck das hatte, dass du den Text in ner int Variable speichern wolltest, denn ich kapiere das nicht 😮 , ist doch völliger Unsinn

    vermutlich wird seine editbox zahlenwerte haben und somit dachte er sich das er diese auch in ein int lesen mussen.



  • In diesem Falle würde sich dann GetDlgItemInt anbieten 🙂



  • Hiho...
    Danke für die Hilfe soweit.
    Ich will in eine Edit eine Zahl(int) eingeben und die in eine Varibale speichern.
    Ich hab das jetzt mit:

    SendMessage(hWndEdit1, WM_GETTEXT, len+1, (long)buffer);
    GetWindowText(hWndEdit02, zahl, len+1);
    buffer = GetDlgItemInt(hWndEdit01, IDE1_EISEN, &trans, FALSE);
    

    Und bekomme immer den gleichen Wert in den Buffer reingeschrieben.
    buffer = -1.0737418e+008
    sollte aber eigentlich 123 drinstehen.

    VLL könnst ihr mir weiter helfen

    cu Laubi



  • Du sollst nich alles zusammenschmeißen, sondern einfach nur GetDlgItemInt aufrufen 😉

    UINT zahl = GetDlgItemInt(hWndParent, IDE1_EISEN, NULL, FALSE);
    


  • Hiho...
    ich wollte mit der Codestelle ausdrücken, dass ich alle drei versionen getestet habe un keine zum ergebnis geführt hat.

    hab jetzt mal den code von flenders ausprobiert. jetzt steht im buffer der wert:
    3435973836 aber immernoch nich meine erhoffte 123 :*(

    muss mit dem ergebnis noch was gemacht werden (casten oder sowas)?

    cu Laubi



  • erst einmal solltest du im stil vom edit festlegen, dass dort nur Zahlen eingegeben können, danach kannst du den Text in einem Ansizeigerarray speichern und per atoi oder atol zu einem int wert (Bei atoi) oder zu einem long wert (bei atol) konvertieren und fertig



  • Laubfrosch schrieb:

    hab jetzt mal den code von flenders ausprobiert. jetzt steht im buffer der wert:
    3435973836 aber immernoch nich meine erhoffte 123 :*(

    zeig mal deinen code !!! der wie flenders es gesagt hat müsste es gehen

    Laubfrosch schrieb:

    muss mit dem ergebnis noch was gemacht werden (casten oder sowas)?

    nein ausser du liesst einen text aus, dann musst du konvertieren wie jeanlebon es gesagt



  • Hiho hier ist der code von der Callback funktion:

    #define IDE1_EISEN 1301
    #define IDPB_1 6101
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	int wmId, wmEvent;
    	PAINTSTRUCT ps;
    	HDC hdc;
    	static HBITMAP hBitmap;
    	BITMAP bitmap;
    	int len = SendMessage(hWndEdit01, WM_GETTEXTLENGTH, 0, 0);
    	UINT buffer;
    
    	switch (message) 
    	{
    	case WM_COMMAND:
    		wmId    = LOWORD(wParam); 
    		wmEvent = HIWORD(wParam); 
    		switch (wmId)
    		{		
    		case IDPB_1:
    			buffer = GetDlgItemInt(hWndEdit01, IDE1_EISEN, NULL, TRUE);
    			break;
    
    		default:
    			return DefWindowProc(hWnd, message, wParam, lParam);
    		}
    		break;
    
    	case WM_CREATE:
    		if (!(hWndLable01 = CreateWindowEx(NULL, 
    			"button",
    			"Berechnen",
    			WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    			710,515,
    			80,30,
    			hWnd,
    			(HMENU)6101,
    			GetModuleHandle(NULL),
    			NULL)))
    		return 0;
    
    		if(!(hWndEdit01 = CreateWindowEx(NULL,
    			"EDIT",
    			"",
    			WS_CHILD | WS_VISIBLE | ES_NUMBER,
    			50, 110,
    			60,15,
    			hWnd,
    			(HMENU)1301,
    			GetModuleHandle(NULL),
    			NULL)))
    		return 0;
    
    	default:
    		return DefWindowProc(hWnd, message, wParam, lParam);
    	}
    	return 0;
    }
    

    habe den Code aml auf das wichtigste beschränkt...wäre sonst zu lang.

    ich hoffe der code reicht.
    cu Laubi



  • LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	int wmId, wmEvent;
    	PAINTSTRUCT ps;
    	HDC hdc;
    	static HBITMAP hBitmap;
    	BITMAP bitmap;
    //	int len = SendMessage(hWndEdit01, WM_GETTEXTLENGTH, 0, 0); unwichtig (denke ich)
    	UINT buffer;
    
    	switch (message) 
    	{
    	case WM_COMMAND:
    		wmId    = LOWORD(wParam); 
    		wmEvent = HIWORD(wParam); 
    		switch (wmId)
    		{		
    		case IDPB_1:
                            {
    			buffer = GetDlgItemInt(hWndEdit01, IDE1_EISEN, NULL, TRUE); // HIER sollte buffer stimmen
                            // test
                            char szTemp[256];
                            sprintf(szTemp, "Editboxinhalt %d", buffer);
                            MessageBox(hWnd, szTemp, "info", MB_OK);
                            } 
    			break;
    
    // wo hast du DAS denn her ?
    //		default:
    //			return DefWindowProc(hWnd, message, wParam, lParam);
    		}
    		break;
    


  • hWndEdit01 ist auch sicher static?

    BTW: Was ist an DefWindowProc() falsch, ob er das nun am Schluss oder als default macht ist doch egal.

    MfG SideWinder



  • Du sollst bei GetDlgItemInt nicht das Handle des Edits einsetzen, sondern das des Parents - also hWnd



  • Und das mit return 0 nach den if's bei WM_CREATE sieht auch etwas komisch aus:

    If an application processes this message, it should return zero to continue creation of the window. If the application returns 1, the window is destroyed and the CreateWindowEx or CreateWindow function returns a NULL handle.



  • Hiho...
    Danke an alle für eure Ratschläge und den Quellcode von miller_m.
    Das Problem war das Handel. Muss in der Tat

    buffer = GetDlgItemInt(hWnd, IDE1_EISEN, NULL, TRUE);
    

    sein und nicht

    buffer = GetDlgItemInt(hWndEdit01, IDE1_EISEN, NULL, TRUE);
    

    THX nochmal cu Laubi


Anmelden zum Antworten