Быстрый алгоритм переноса слов.
От: ice71crew Россия  
Дата: 19.07.04 16:53
Оценка:
Я создаю свой элемент управления, функциональность которого частично повторяет RichEdit.
Необходимо отображать текст, который может быть достаточно большого размера (мегабайт и более). Естесственно нужна функция переноса слов (как в том же rich'е). Я создал некоторый алгоритм, который справляется замечательно со своей задачей если текст небольшой.

Мой алгоритм сводится примерно к следующему:
Есть некоторый динамический массив индексов. Каждый индекс — это просто смещение в текстовом буфере. Указывает на первый символ первого слова в каждой строке. При получении сообщения WM_SIZE происходит расчет: вычисляется количество помещаюихся в строку слов и на первый символ первого в каждой строке слова добавляется индекс. Потом при получении сообщения WM_PAINT по количеству индексов (строк) расчитывается размер scrollbar'а, а в зависимости от позиции ползунка расчитывается первая строка, с которой надо начать отрисовку текста и строка, которой надо закончить отрисовку. Потом рисуется текст.
Таким образом получаем прямопропорциональную зависимость — чем больше текст, тем больше необходимо времени на предварительный расчет индексов при изменении размеров окна.

С текстом около 100 кило уже заметен тормоз, а если текст будет больше — можно дожидаться отображения годами . Расчитывать частично я не могу — тогда неполучается расчитать параметры скроллбара.
Каким образом в том же richedit'е реализован расчет переноса слов? Он не тормозит даже при 500 килобайтном тексте.
-=Ай=-
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.