Page 1 of 1

[MFC] Cum adaug text la un edit control?

Posted: 16 Jul 2007, 14:49
by Ovidiu Cucu
Problema
O metoda des utilizata este de a scoate textul initial cu GetWindowText pentru a adauga textul, apoi a-l pune inapoi cu SetWindowText.

Exemplu

Code: Select all

   CString strText; 
   edit.GetWindowText(strText); 
   strText += pszNewText; 
   edit.SetWindowText(strText);
Simplu. Totusi, mai ales in cazul edit-urilor multiline, daca textul din edit este foarte lung iar adaugarile se fac des, metoda nu este chiar atat de grozava.

Rezolvare
Pentru controlul edit setam selectia la sfarsitul textului existent apoi o inlocuim cu textul de adaugat. E mai rapid si nici nu e nevoie de un string intermediar.

Exemplu

Code: Select all

   // get the text length 
   const int nLength = edit.GetWindowTextLength(); 
   // set the selection at the end of text 
   edit.SetSel(nLength, nLength); 
   // replace selection (append the text). 
   edit.ReplaceSel(pszNewText);
NOTE:
  1. Daca intr-un edit multiline se doreste trecere la linie noua, trebuie adaugat la text "\r\n" (carriage return si new line).
  2. Daca nu se doreste sa se faca scroll automat la fiecare adaugare de text, se pune pe TRUE argumentul bNoScroll functiei CEdit::SetSel (implicit acesta este FALSE).
Exemplu

Code: Select all

// MyEditView.h
class CMyEditView : public CEditView
{
// ...
// Implementation
protected:
   void AppendLine(LPCTSTR pszText, BOOL bNoScroll = FALSE);
// ...
};

Code: Select all

// MyEditView.cpp
void CMyEditView::AppendLine(LPCTSTR pszText, BOOL bNoScroll /*= FALSE*/)
{
   CString strLine;
   strLine.Format(_T("%s\r\n"), pszText); // add "\r\n" (CR and LF).

   // get a reference to the edit control used by the edit view
   CEdit& edit = GetEditCtrl(); 
   // set the selection at the end, then append the new line of text
   const int nLength = edit.GetWindowTextLength();
   edit.SetSel(nLength, nLength, bNoScroll);
   edit.ReplaceSel(strLine);
}

<< Back to MFC index