Здравствуйте! Подскажите, пожалуйста, как можно узнать число видимых символов или строк в многострочном edit-контроле. Или сколько символов из буфера будет отображено в его контексте. P.S. Нашел функцию GetTextExtentExPoint, но она позволяет узнать лишь сколько символов влезет по ширине (если я правильно понял). Но Edit у меня многострочный, и сколько строк влезет никак не могу узнать. Если кто-нибудь сталкивался с подобной задачей, подскажите, пожалуйста!
Сейчас я примерно так и делаю, но там не только высота фонта, а + межстрочные интервалы. Но что-то не выходит... Значения получаются близкие к реальному числу отображаемых строк, но все же не то. Подостовернее способов нет?
заполучи... код очень старый, но вроде пашет в одной из аппликаций до сих пор, функция дает индекс последней видимой строки в CEdit для определения числа видимых строк закомментируй nIndex += GetFirstVisibleLine(); Код (Text): class CEditDerived : public CEdit { public: int GetLastVisibleLine(); //to do! add some other crap, here .................. } //The function returns the index of last visible line or // -1 if it fails int CEditDerived::GetLastVisibleLine() { int nIndex = -1; int nLineIndex; CString cstring; CString cstringLeft; RECT rectClient; RECT rect; GetClientRect(&rectClient); CDC * pDC = GetDC(); pDC->SetMapMode(MM_TEXT); pDC->SetBkMode(OPAQUE); CFont * pFont = GetFont(); pDC->SelectObject(pFont); GetWindowText(cstring); int nRetVal; for(nIndex = 0; nIndex < GetLineCount(); nIndex++) { rect = rectClient; nLineIndex = LineIndex(nIndex); cstringLeft = cstring.Left(nLineIndex); nRetVal = pDC->DrawText( (LPCTSTR)(cstringLeft), nLineIndex, &rect, DT_CALCRECT|DT_WORDBREAK|DT_NOCLIP|DT_EXPANDTABS); if(((rect.bottom - rect.top)>rectClient.bottom) && nRetVal) { nIndex-=2; break; } } ReleaseDC(pDC); nIndex += GetFirstVisibleLine(); return nIndex; }
Спасибо за ответы! SmikeX - особенно спасибо! Правда этот код я еще не проверял - сделал делением высоты котрола на высоту фонта. Кривенько, но работает. Если что нипременно воспользуюсь!