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.