Nicht noch ein Editfeldproblem!



  • ~o_

    na du solltest schon schauen dass "der Buffer" genauso groß ist wie der String der den Text aufnehmen soll.

    [cpp]
        int GetWindowText(
    
            HWND hWnd,	// handle of window or control with text
            LPTSTR lpString,	// address of buffer for text
            int nMaxCount 	// maximum number of characters to copy
            }
    
        CHAR lpString[10];
        nMaxCount = lstrlen(lpString);
        GetWindowText(hwnd, lpString, nMaxCount);
    
        // alternativ
    
        GetWindowText(hwnd, lpString, 10); //  :o) 
    
    [/cpp]
    


  • int nMaxCount     // maximum number of characters to copy
    

    Das heißt, dass nicht angegeben werden soll wieviele chars es genau sind, sondern wieviele es maximal sind. Also ist es egal ob ich mehr angebe als benötigt werden.

    Habs trotzdem mal probiert. Hat auch nichts gebracht.

    Mfg Ominion



  • Ominion schrieb:

    Das heißt, dass nicht angegeben werden soll wieviele chars es genau sind, sondern wieviele es maximal sind.

    du gibst an wieviel chars maximal in dein array kopiert werden können.

    Ominion schrieb:

    Also ist es egal ob ich mehr angebe als benötigt werden.

    du solltest auf keinen fall mehr angeben als dein char array gross ist



  • Wenn das so gemeint ist. Das Problem ist leider aber immer noch nicht gelöst. Ich habe das jetzt zwar so gemacht wie _o~ geschrieben hat, hat aber trotzdem nich funktioniert. Woran liegt das?

    Mfg Ominion



  • Ominion schrieb:

    Woran liegt das?

    der codeabschnitt schein korrekt zu sein. bemühe doch mal deinen debugger



  • Ominion schrieb:

    int nMaxCount     // maximum number of characters to copy
    

    Das heißt, dass nicht angegeben werden soll wieviele chars es genau sind, sondern wieviele es maximal sind. Also ist es egal ob ich mehr angebe als benötigt werden.

    quatsch. theoretisch kann windows an der addresse des buffers 25 bytes auf 0 setzen oder sonst irgendwelchen quatsch machen. das bort sich dann schön in eine anderen sachen auf dem stack.

    debugger ist etwas übertrieben für so ein problem. lass dir doch erstmal die einzelnen strings nach GetWindowText ausgeben und guck wo was nicht geht. oder poste mehr code.



  • fsdfsd schrieb:

    debugger ist etwas übertrieben für so ein problem.

    😮 😮 😮



  • Also was er damit sagen will weiß ich nicht.

    Mfg Ominion



  • Wie im ersten Beitrag gesagt: Wenn ich den Text ausgeben lasse, kommt immer 0, egal welche Zahlen ich eingebe.
    Das kommt beim Debuggen raus:

    --------------------Konfiguration: main - Win32 Debug--------------------
    Kompilierung läuft...
    Fehler beim Start cl.exe
    
    main.exe - 1 Fehler, 0 Warnung(en)
    

    Mfg Ominion



  • Also diese Fehlermeldung kommt nur, wenn ich mein Programm in MVC++ 6.0 kompiliere bzw. debugge. Wenn ich das aber im Borland Compiler 5.5 kompiliere, wird das Programm zwar erstellt, aber dann besteht wieder das Problem mit dem Eintragen bzw. auslesen.

    Mfg Ominion



  • einfach dem Ratschlag des Vorredners folgen und ma den kompletten code Deiner Routine posten. Ist ja nix triviales was du da friemelst und Dein Fehler wird dann wohl sofort gefunden.

    ~o_



  • Also WinMain poste ich jetzt mal nicht, da dort nichts besonderes drin ist. Hier ist die CALLBACK-Prozedur:

    LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	HWND hStartPoints1;
    	HWND hStartPoints2;
    
    	HWND hLifePoints1;
    	HWND hLifePoints2;
    
    	HWND hCalc1;
    	HWND hCalc2;
    
    	char old_lp1[10];
    	char old_lp2[10];
    
    	char damage_lp1[10];
    	char damage_lp2[10];
    
    	char new_lp1[10];
    	char new_lp2[10];
    
    	int lp1;
    	int lp2;
    
    	int lp11;
    	int lp12;
    
    	int lp21;
    	int lp22;
    
    	int length11;
    	int length12;
    
    	int length21;
    	int length22;
    
    	PAINTSTRUCT ps;
    	HDC hdc;
    	HGDIOBJ OldObj;
    
    	switch (message)
        {
    
    		case WM_CREATE:
    			  hStartPoints1 = CreateWindow ("Edit", NULL, WS_CHILD | WS_VISIBLE, 70, 30, 100, 17, hWnd, (HMENU)1, g_hInst, NULL); 
    			  hStartPoints2 = CreateWindow ("Edit", NULL, WS_CHILD | WS_VISIBLE, 200, 30, 100, 17, hWnd, (HMENU)2, g_hInst, NULL);
    
    			  hLifePoints1 = CreateWindow ("Edit", NULL, WS_CHILD | WS_VISIBLE, 70, 55, 100, 17, hWnd, (HMENU)3, g_hInst, NULL);
    			  hLifePoints2 = CreateWindow ("Edit", NULL, WS_CHILD | WS_VISIBLE, 200, 55, 100, 17, hWnd, (HMENU)4, g_hInst, NULL);
    
    			  hCalc1 = CreateWindow ("Button", "Berechnen", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 70, 80, 100, 20, hWnd, (HMENU)5, g_hInst, NULL);
    			  hCalc2 = CreateWindow ("Button", "Berechnen", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 80, 100, 20, hWnd, (HMENU)6, g_hInst, NULL);
    		return 0;
    
    		case WM_COMMAND:
    			  switch (LOWORD(wParam))
    			  {
    				  case 5:
    					  length11 = lstrlen (old_lp1);
    					  length12 = lstrlen (damage_lp1);
    
    					  GetWindowText (hStartPoints1, old_lp1, length11);
    					  GetWindowText (hLifePoints1, damage_lp1, length12);
    
    					  lp11 = atoi (old_lp1);
    					  lp12 = atoi (damage_lp1);
    
    					  lp1 = lp11 - lp12;
    
    					  sprintf (new_lp1, "%i", lp1);
    
    					  SetWindowText (hStartPoints1, new_lp1);
    				  return 0;
    
    				  case 6:
    					  length21 = lstrlen (old_lp2);
    					  length22 = lstrlen (damage_lp2);
    
    					  GetWindowText (hStartPoints2, old_lp2,length21);
    					  GetWindowText (hLifePoints2, damage_lp2, length22);
    
    					  lp21 = atoi (old_lp2);
    					  lp22 = atoi (damage_lp2);
    
    					  lp2 = lp21 - lp22;
    
    					  sprintf (new_lp2, "%i", lp2);
    
    					  SetWindowText (hStartPoints2, new_lp2);
    				  return 0;
    			  }
    		return 0;
    
    		case WM_PAINT:
    			  hdc = BeginPaint (hWnd, &ps);
    			        OldObj = SelectObject (hdc, GetStockObject (DEFAULT_GUI_FONT)); 
                        SetBkMode (hdc, TRANSPARENT);
    					TextOut (hdc, 10, 30, "Life Points", strlen ("Life Points"));
    					TextOut (hdc, 10, 55, "Schaden", strlen ("Schaden"));
    					TextOut (hdc, 100, 10, "Spieler 1", strlen ("Spieler 1"));
    					TextOut (hdc, 230, 10, "Spieler 2", strlen ("Spieler 2"));
    					TextOut (hdc, 10, 105, "© Software Meadow", strlen ("© Software Meadow"));
    					DeleteObject (SelectObject (hdc, OldObj));
    			  EndPaint (hWnd, &ps);
    	    return 0;
    
    		case WM_DESTROY:
    			  PostQuitMessage (0);
    		return 0;
    	}
    
        return DefWindowProc (hWnd, message, wParam, lParam);
    }
    

    Mfg Ominion



  • Das sollte sizeof sein und nicht lstrlen :

    length11 = lstrlen (old_lp1);
    length12 = lstrlen (damage_lp1);
    


  • ausserdemsind die ganzwen window handle doch ned static dann kann es ja ned funzen. mach die mal static.



  • Danke jetzt klappts! Ich werde mir jetzt einen Zettel an meinen Screen heften, dass ich static nicht vergessen soll, wenn ich Variablen verändere 🙂
    lstrlen geht nicht. Dadurch wurde das Ergbenis immer auf 0 gesetzt. Aber mit sizeof hats geklappt.

    Mfg Ominion


Anmelden zum Antworten