Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void MyDrawText(HDC hdc, PAINTSTRUCT *ps, View *viewModel, Text * textModel, RECT rect)
- {
- size_t maxSym = rect.right / viewModel->LetterWidth + 1;//максимальное число символов, которое может поместиться на экране
- size_t maxStr = rect.bottom / viewModel->LetterHeight + 1; //максимальная число строк, которое может поместиться на экране
- size_t *curShift;
- int paintBegin = ps->rcPaint.top/viewModel->LetterHeight - 1;
- paintBegin = paintBegin < 0? 0: paintBegin;
- if(!viewModel->layoutMode) // без верстки
- {
- curShift = textModel->shift;
- maxStr = min(maxStr, textModel->numOfString - 1 - viewModel->curString);
- }
- else // с версткой
- {
- curShift = viewModel->virtualShift;
- maxStr = min(maxStr, viewModel->numOfVirtualStr - 1 - viewModel->curString);
- }
- int paintEnd = min(ps->rcPaint.bottom/viewModel->LetterHeight, maxStr) + 1;
- // int paintEnd = min(maxStr, viewModel->curString + ps->rcPaint.bottom/viewModel->LetterHeight);
- //выводим мтолько, сколько нужно строк
- //итерация по числу строк, которые надо выводить
- for (size_t i = paintBegin+viewModel->curString; i < paintEnd+viewModel->curString; i++ )
- {
- //если в данной строке символов меньше, чем можно вывести
- if(curShift[i + 1] - curShift[i] <= viewModel->curSymb)
- continue;
- TextOut(hdc,
- 0,
- (i - viewModel->curString) * viewModel->LetterHeight,
- (char*)(textModel->buff + curShift[i] + viewModel->curSymb),
- min(curShift[i + 1] - curShift[i] - viewModel->curSymb, maxSym));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement