Funktion für Editfeld



  • BOOL edit_addtext(HWND hWnd, LPCTSTR lpText)
    {
       DWORD dwStart = 0, dwEnd = 0;
       int nLen;
    
       nLen = GetWindowTextLength(IDC_EDIT1);
       SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
       SendMessage(hWnd, EM_SETSEL, (WPARAM)nLen, (LPARAM)nLen);
       SendMessage(hWnd, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)lpText);
       SendMessage(hWnd, EM_SETSEL, (WPARAM)dwStart, (LPARAM)dwEnd);
    
       return(TRUE);
    }
    

    Hey, habe hier die Funktion von einer WinAPI Seite.
    Ich weiß was die Funktion machen soll, aber verstehe irgenwie nicht wie, also die 4 SendMessage Zeilen.

    Die Funktion schreibt ja einen ihr übergebenen Text in ein Edit feld.

    Aber wie genau funktioniert das? was genau ist LPCTSTR? WinAPI String?



  • bool edit_addtext(HWND     hWnd, // HWND deines Edit-Controls
                      LPCTSTR  lpText = _T("Test")) // Text der eingefügt werden soll. LPCTSTR ist ein const TCHAR* d.h. bei UNICODE ein const wchar_t* und sonnst ein const char*
    {
        if (hWnd == NULL || lpText == NULL) // Sind die übergebenen Parameter in Ordnung?
            return false;
    
        DWORD dwStart = 0; // Anfang des vorher ausgewählten Bereichs
        DWORD dwEnd   = 0;   // Ende des vorher ausgewählten Bereichs
        int   nLen    = GetWindowTextLength(hWnd); // Länge des Textes holen, der momentan im Edit(hWnd) steht; wobei IDC_EDIT1 falsch war ... muss auch hWnd sein ...
        SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd); // Holt halt den momentan ausgewählten Bereich
        SendMessage(hWnd, EM_SETSEL, (WPARAM)nLen, (LPARAM)nLen); // Springt ans Ende des Textes der in der EditBox steht.
        SendMessage(hWnd, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)lpText); // Fügt dort deinen Text an. Hier durch Replace-Trick 
        SendMessage(hWnd, EM_SETSEL, (WPARAM)dwStart, (LPARAM)dwEnd); // Setzt wieder die alte Makierung, die durch das 1. EM_SETSEL aufgehoben wurde...
        return true;
    }
    

    Eigentlich müsste man noch gucken ob die SendMessage-Aufrufe fehlschlagen.... falls das der Fall sein sollte müsste man auch false zurückgeben ...



  • (D)Evil schrieb:

    // ...
        if (hWnd == NULL || lpText == NULL) // Sind die übergebenen Parameter in Ordnung?
            return false;
    // ...
    

    Dann besser:

    if(!IsWindow(hWnd) || lpText == NULL)
       return (false);
    

    😉 .



  • EM_SETSEL und EM_REPLACESEL haben aber garkeinen Returnwert, und EM_GETSEL keinen "error return", also kann man da garnix prüfen 😉



  • Und wie mache ich das so das er den Text immer in eine neue Zeile verschiebt wird, sodass der aktuelle text oben steht und der alte text eine Zeile tiefer??

    Also wie ich den aktuellen text vor den alten Text schreibe, weiß ich:

    SendMessage (hWndEdit, EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) lpText);
        SendMessage (hWndEdit, EM_SETSEL, (WPARAM) dwStart, (LPARAM) dwEnd);
    

    Da steht der text aber direkt zusammen ohne Leerzeichen und so^^
    Mit welcher Message mache ich es, dass der alte text noch eine zeile tiefer geht???



  • gar nicht -.-

    füg einfach am Ende deiner Zeichenkette ein "\n" an.
    Im Zweifelsfalle kann es auch "\r\n" sein.


Anmelden zum Antworten