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

. Расчитывать частично я не могу — тогда неполучается расчитать параметры скроллбара.
Каким образом в том же richedit'е реализован расчет переноса слов? Он не тормозит даже при 500 килобайтном тексте.