salex,
1)
Invalidate(false);
- не рекомендую передавать false внутрь , лучше 0 или FALSE

2) код будет жутко тормозить имхо. методы борьбы:
- заменить if(nCtlColor == CTLCOLOR_EDI
на
switch
- создать все кисти один раз в конструкторе , а не new их каждый раз
3)
>>
>>// Создание кисти с инвертированным цветом фона редактора
>> brush->CreateSolidBrush(0xFFFFFF - bkColor);
жуть!! Это вычитание, а не инвертирование , надо
brush->CreateSolidBrush(bkColor^0xFFFFFF);
Offtopic:
>>вот проект в целом!Зачёт 4!
у кого списывал, Иванов ? У Сидорова? Обоим двойка

Поставлю в угол.
а удалить память, на которую указывает brash в деструкторе не забыл ?