Здравствуйте, <Аноним>, Вы писали:
А> Ну да, искал я там. Там одни полноценные цветовые редакторы, а мне нужен маленький CEdit, немногострочный, простенький и без лишней функциональности.
SDB>> SDB>>Отнаследоваться от CEdit и обработать то же самое сообщение в наследнике, используя ON_WM_CTLCOLOR_REFLECT и TN062: Message Reflection for Windows Controls. SDB>>
А>Да, я пробовал именно второй (брал пример отсюда http://www.rsdn.ru/Forum/?mid=386559). Цвет меняется, но ведь только один раз, в момент создания. А мне нужно, еще раз повторю, по ходу программы. Я непонимаю принцип действия этого кода, ему что надо сообщение WM_CTLCOLOR посылать? Если так, то как это делать??
Гх-м-м... AFAIK сообщение WM_CTLCOLOR посылается всякий раз, когда винде нужно узнать, как рисовать данный контрол. Насколько я понимаю, Вы хотите перекрашивать Ваш эдит прямо в процессе набора текста, например. Попробуйте вызывать RedrawWindow(), а в коде обработчика WM_CTLCOLOR пропишите отрисовку в соответствии с тем, как выглядит текст в данный момент.
P.S.
Сообщения посылаются с помощью методов CWnd::SendMessage() и CWnd::PostMessage().
[ posted via RSDN@Home 1.1.2 stable, accompanied by Iron Maiden — Two Minutes To Midnight ]
Хэлп ми пли-иис!
Целый день голову ломаю, никак не могу найти подходящий класс.
В общем, как сделать чтобы у CEdit'а (однострочного) по ходу программы (в зависимости от дейтвий пользователя) менялся цвет текста, цвет фона и стиль шрифта.
Грамотный и своевременный ответ без вознаграждения не останется!
Здравствуйте, Аноним, Вы писали:
А>Хэлп ми пли-иис! А>Целый день голову ломаю, никак не могу найти подходящий класс. А>В общем, как сделать чтобы у CEdit'а (однострочного) по ходу программы (в зависимости от дейтвий пользователя) менялся цвет текста, цвет фона и стиль шрифта. А>Грамотный и своевременный ответ без вознаграждения не останется!
Сабкласся и копаф в сторону вот ниже приведенного:
RESULT CMyEdit::SOnCtlColor(LRESULT *pResult, HDC hdc, HWND hParent)
{
SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,RGB(255,0,0));
Здравствуйте, Аноним, Вы писали:
А>Целый день голову ломаю, никак не могу найти подходящий класс.
Здесь искали?
А>В общем, как сделать чтобы у CEdit'а (однострочного) по ходу программы (в зависимости от дейтвий пользователя) менялся цвет текста, цвет фона и стиль шрифта.
Есть два способа:
Обработать в окне-родителе этого эдита сообщение WM_CTLCOLOR.
Отнаследоваться от CEdit и обработать то же самое сообщение в наследнике, используя ON_WM_CTLCOLOR_REFLECT и TN062: Message Reflection for Windows Controls.
И в том и в другом случае рекомендую внимательно прочитать документацию из PSDK касающуюся обработки сообщения WM_CTLCOLOREDIT, обратив внимание на то, что
Read-only or disabled edit controls do not send the WM_CTLCOLOREDIT message; instead, they send the WM_CTLCOLORSTATIC message.
То есть в OnCtlColor() Вам нужно будет анализировать параметр nCtlColor не только на равенство CTLCOLOR_EDIT, но и на равенство CTLCOLOR_STATIC.
А>Грамотный и своевременный ответ без вознаграждения не останется!
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здесь искали?
Ну да, искал я там. Там одни полноценные цветовые редакторы, а мне нужен маленький CEdit, немногострочный, простенький и без лишней функциональности.
SDB>Есть два способа:
SDB> SDB>Обработать в окне-родителе этого эдита сообщение WM_CTLCOLOR. SDB>Отнаследоваться от CEdit и обработать то же самое сообщение в наследнике, используя ON_WM_CTLCOLOR_REFLECT и TN062: Message Reflection for Windows Controls. SDB>
Да, я пробовал именно второй (брал пример отсюда http://www.rsdn.ru/Forum/?mid=386559). Цвет меняется, но ведь только один раз, в момент создания. А мне нужно, еще раз повторю, по ходу программы. Я непонимаю принцип действия этого кода, ему что надо сообщение WM_CTLCOLOR посылать? Если так, то как это делать??