Page 1 of 1

[MFC] Cum inlocuim o line intr-un edit multiline?

Posted: 16 Jul 2007, 14:36
by Ovidiu Cucu
Cine cauta in (editii mai vechi) de MSDN s-ar putea sa gaseasca acest exemplu.
MSDN Library - October 2001 wrote:

Code: Select all

// The pointer to my edit. 
extern CEdit* pmyEdit; 
// The string for replacing. 
extern LPCTSTR lpszmyString; 

int nBegin, nEnd; 
// Replace the second line, if it exists, of the edit control 
// with the text lpszmyString. 
if ((nBegin=pmyEdit->LineIndex(1)) != -1) 
{ 
   nEnd = nBegin + pmyEdit->LineLength(1); 
   pmyEdit->SetSel(nBegin, nEnd); 
   pmyEdit->ReplaceSel(lpszmyString); 
}
Hai mai intai sa-l "traducem" intr-o forma mai usor de citit de programatorii MFC.

Code: Select all

   CString strText = _T("Replaced text"); 
   CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); 
   int nBegin = pEdit->LineIndex(1); 
   if(-1 != nBegin) 
   { 
      int nEnd = nBegin + pEdit->LineLength(1); // gresit! 
      pEdit->SetSel(nBegin, nEnd); 
      pEdit->ReplaceSel(strText); 
   }
Problema
Exemplul de mai sus nu functioneaza pentru ca functia CEdit::LineLength trebuie sa primeasca un "character index" (cel intors de functia CEdit::LineIndex), adica indexul primului caracter din linie numarat de la inceputul textului si nu indexul liniei.

Rezolvare
Vezi exemplul urmator si compara linia in care se apeleaza LineLength.

Exemplu

Code: Select all

   CString strText = _T("Replaced text"); 
   CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); 
   int nBegin = pEdit->LineIndex(1); 
   if(-1 != nBegin) 
   { 
      int nEnd = nBegin + pEdit->LineLength(nBegin); // OK. 
      pEdit->SetSel(nBegin, nEnd); 
      pEdit->ReplaceSel(strText); 
   }
NOTA: in editiile mai noi de MSDN aceasta greseala a fost corectata.


<< Back to MFC index