http://alpha-thema-online.uv.ro
Fa-ti si tu propriul forum, pe www.myforum.ro!
Pagina de start a forumului http://alpha-thema-online.uv.ro Autentificare Inregistrare FAQ Membri Cautare

Pagina de start a forumului http://alpha-thema-online.uv.ro » C / C++ / C# » MFC Tips - Common Controls C++
Creaza un subiect nou  Raspunde la subiect Subiectul anterior :: Subiectul urmator 
MFC Tips - Common Controls C++
MesajTrimis: 19/07/2007 16:26 Raspunde cu citat (quote)
Ad_Infinitum
Administrator
Administrator
Ad_Infinitum
Data inscrierii: 23/Iun/2007
Mesaje: 212




Cum inlocuim o line intr-un edit multiline?

Cine cauta in (editii mai vechi) de MSDN s-ar putea sa gaseasca acest

Exemplu

Citat:


// 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:

Citat:


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 spre comparatie linia in care se apeleaza LineLength)

Citat:


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.

Cum adaug text la un edit control?

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

Citat:

CString strText;
edit.GetWindowText(strText);
strText += pszNewText;
edit.SetWindowText(strText);


Totusi, mai ales in cazul edit-urilor multiline, daca textul din edit este foarte lung iar adaugarile se fac des, metoda nu este chiar asa grozava.

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

Exemplu

Citat:

// 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);


Rich Edit control - rule #0

Problema
Tocmai am pus intr-un dialog un contro tip rich edit. Aplicatia se compileaza bine-mersi, dar cand rulez programul, dialogul "refuza" sa mai apara.

Rezolvare
S-a uitat sau n-am stiut regula #0: controlul trebuie initializat cu AfxInitRichEdit.

Exemplu

Citat:

BOOL CMyApp::InitInstance()
{
AfxInitRichEdit();
// ...
}
Vezi profilul utilizatorului Trimite mesaj privat

MFC Tips - Common Controls C++
 Pagina de start a forumului http://alpha-thema-online.uv.ro » C / C++ / C#
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum
Ora este GMT + 3 ore  
Pagina 1 din 1  

  
  
 Creaza un subiect nou  Raspunde la subiect  


Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
    Powered by phpBB © 2001-2004 phpBB Group. phpBB Skin by Vjacheslav Trushkin.