Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[MFC, Win32] CRichEditCtrl - пытаюсь подсвечивать синтаксис 04.12.08 15:27 Число просмотров: 2100
Автор: Heller <Heller> Статус: Elderman Отредактировано 04.12.08 16:23 Количество правок: 2
|
Есть задача - подсвечивать синтаксис в сорсах наподобие Сишных. Наследуюсь от CRichEditCtrl. Здесь возникает трудность - все способы смены формата текста которые я нашел завязаны на текущую селекцию/позицию. То есть прежде чем применить формат к тексту, я должен его селектировать.Однако винда сразу при смене селекии, если она не умещается в видимой области, скролирует текст так, чтобы селекция поместилась в экран. Это приводит к перемаргиванию (есть метод HideSelection, который позволяет скрыть селекцию, но это не спасает от автоматического скроллинга).
Собственно проблема имеется только с последней строчкой. Когда пользователь в середине текста открывает многострочный комментарий (/*), надо прокрасить весь текст вниз, включая последнюю видимую строчку, которая чаще всего не помещается на экран целиком. Попытка селектировать ее для смены формата приводит к скроллингу.
Выставлять позицию скроллинга в первоначальную после перекраски не представляется возможным, так как реально скроллинг позиционируется не точно по строкам, а ScrollLine принимает в качестве параметров только целые значения. Перехватывать момент скроллинга так же не получается, так как WM_VSCROLL зовется только если таскать скроллинг руками.
Хотел вообще последнюю строчку не отображать, если она целиком не умещается - переопределил для этого OnPaint, но как только я это сделал, что-либо отрисовываться вообще перестало.
Короче я в замешательстве. Собственные идеи кончились. Буду рад чужим.
P.S. Родилась идея рисовать поверх контрола просто белый прямоугольник, перекрывая последнюю строчку, но это совсем уж грязный хак.
P.S.S. Можно конечно и самому текст в OnPaint-е отрисовывать, но не хочется блин.
|
- [MFC, Win32] CRichEditCtrl - пытаюсь подсвечивать синтаксис - Heller 04.12.08 15:27 [2100]
|
|
|