Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. void MyDrawText(HDC hdc, PAINTSTRUCT *ps, View *viewModel, Text * textModel, RECT rect)
  2. {
  3. size_t maxSym = rect.right / viewModel->LetterWidth + 1;//максимальное число символов, которое может поместиться на экране
  4. size_t maxStr = rect.bottom / viewModel->LetterHeight + 1; //максимальная число строк, которое может поместиться на экране
  5. size_t *curShift;
  6. int paintBegin = ps->rcPaint.top/viewModel->LetterHeight - 1;
  7. paintBegin = paintBegin < 0? 0: paintBegin;
  8. if(!viewModel->layoutMode) // без верстки
  9. {
  10. curShift = textModel->shift;
  11. maxStr = min(maxStr, textModel->numOfString - 1 - viewModel->curString);
  12. }
  13. else // с версткой
  14. {
  15. curShift = viewModel->virtualShift;
  16. maxStr = min(maxStr, viewModel->numOfVirtualStr - 1 - viewModel->curString);
  17. }
  18. int paintEnd = min(ps->rcPaint.bottom/viewModel->LetterHeight, maxStr) + 1;
  19. // int paintEnd = min(maxStr, viewModel->curString + ps->rcPaint.bottom/viewModel->LetterHeight);
  20. //выводим мтолько, сколько нужно строк
  21. //итерация по числу строк, которые надо выводить
  22. for (size_t i = paintBegin+viewModel->curString; i < paintEnd+viewModel->curString; i++ )
  23. {
  24. //если в данной строке символов меньше, чем можно вывести
  25. if(curShift[i + 1] - curShift[i] <= viewModel->curSymb)
  26. continue;
  27. TextOut(hdc,
  28. 0,
  29. (i - viewModel->curString) * viewModel->LetterHeight,
  30. (char*)(textModel->buff + curShift[i] + viewModel->curSymb),
  31. min(curShift[i + 1] - curShift[i] - viewModel->curSymb, maxSym));
  32. }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement