Win32 GUI - Edit Control maximale Textlänge ?



  • Gute Abend Community,

    Ich erstelle ein Edit Control und nutze das sozusagen als "Log".
    Mein Tool schreibt da diverse Informationen rein, aber irgendwann ist der Text abgeschnitten und es geht nicht weiter:

    Control:

    hEditLog = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_VSCROLL | WS_CHILD | WS_VISIBLE | ES_READONLY | ES_MULTILINE, 5, 515, 575, 150, hwnd, 0, GetModuleHandle(NULL), NULL);
    

    Funktion mit der ich Text anhänge:

    void AddTextToLog(char *strText) {
    	int index;	
    	char strBuffer[1024];
    	
    	sprintf(strBuffer, "%s\n", strText); 
    
    	index = GetWindowTextLength (hEditLog );
    	SetFocus (hEditLog );
    	SendMessageA(hEditLog , EM_SETSEL, (WPARAM)index, (LPARAM)index); 
    	SendMessageA(hEditLog , EM_REPLACESEL, 0, (LPARAM)strBuffer); 
    
    }
    
    
    

    Ich habe mich bewusst für das Edit Control entschieden, damit der Benutzer ggf. den Text markieren und kopieren kann.
    Was muss ich machen, damit ich einen "unendlich" langen Text in das Control schreiben kann ?
    Oder gibt es vielleicht eine Alternative die ich nicht auf dem Schirm habe ?

    Freue mich auf Antworten.





  • @Ertyty Du könntest deine Information in einen separaten Bereich speichern und zeigst mit dem Editcontrol immer nur einen entsprechenden Bereich daraus an. Dann kann der Text auch "unendlich" sein.


  • Mod

    Copy & Paste kannst Du zeilenweise auch mit einem List-Control bauen.
    Auch das mehrfach markieren ist damit möglich.

    Und Du könntest den virtuellen Modus verwenden. Dann musst DU die Daten nicht mal "doppelt" führen.



  • Danke für die Antworten.
    Ich habe die Funktion nun so geschrieben, das bis zu 50 Zeilen in das Edit Control einfach "angehängt" werden.
    Sind bereits 50 Zeilen im Edit Control vorhanden, wird der ganze Inhalt gelesen und anschließend immer die erste Zeile "rausgelöscht".
    Anschließend wird die neue Zeile angehängt und der neue Inhalt mittels SetWindowText() gesetzt.

    Die Scrollbar setze ich mittels folgenden Zeilen ans Ende:

    SendMessageA(hEditEventLog, EM_SETSEL, 0, -1);
    SendMessageA(hEditEventLog, EM_SETSEL, -1, -1);
    SendMessageA(hEditEventLog, EM_SCROLLCARET, 0, 0);

    Funktioniert an sich auch ganz gut, aber leider ist es so das die Scrollleiste die ganze Zeit hoch und runter wandert, was für die Augen die Hölle ist.
    Gibt es da eine Lösung, außer ein anderes Control zu benutzen ?

    P.s: Die Code Tags funktionieren nicht. Ebenfalls ist ein Login mit FF nicht möglich.


Log in to reply