Страница 1 из 2
Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 22 фев 2007, 19:39
akahan
Привет всем!
Возможно-ли изменить цвет отрисовки текста в окне Edit-контрола не используя WM_CTRCOLOREDIT. Понятно, что ели текст рисуешь самостоятельно, то это возможно, но если текст рисуется средствами системы как имзменить его цвет?
Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 27 фев 2007, 10:30
BBB
Может, ты имел в виду сообщение WM_CTLCOLOR?
По-моему, вполне нормальный вариант (обработать его).
Тебе же не придется самому отрисовывать текст еонтрола. Смысл перехвата этого сообщения - ты подменяешь кисть (Brush), используемую для отрисовки текста. То есть, никакого большого геморроя ты себе не зарабатываешь.
В MSDN есть пример перехвата этого обработчика с использованием MFC:
Код: Выделить всё
HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// Call the base class implementation first! Otherwise, it may
// undo what we're trying to accomplish here.
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// Are we painting the IDC_MYSTATIC control? We can use
// CWnd::GetDlgCtrlID() to perform the most efficient test.
if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
{
// Set the text color to red
pDC->SetTextColor(RGB(255, 0, 0));
// Set the background mode for text to transparent
// so background will show thru.
pDC->SetBkMode(TRANSPARENT);
// Тут еще и цвет бэкграунда можно также сменить
pDC->SetBkColor (RGB(127, 127, 127));
// Return handle to our CBrush object
hbr = m_brush;
}
return hbr;
}
Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 01 мар 2007, 04:31
akahan
WM_CTLCLOR - это сообщение уже давно deprecated. Оно использовалось в 16 битных версиях кода. А сейчас уже вовсю 64 бита!!!

Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 01 мар 2007, 09:37
BBB
akahan писал(а):WM_CTLCLOR - это сообщение уже давно deprecated. Оно использовалось в 16 битных версиях кода. А сейчас уже вовсю 64 бита!!!
Ну не знаю. У меня вышеприведенный пример (в MFC-приложении) вполне себе работает

А раз результат есть, причем есть без лишнего геморроя - значит способ приемлем.
Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 02 мар 2007, 15:58
somewhere
" писал(а):А сейчас уже вовсю 64 бита!!!
Хотелось бы посмотреть на 64-битную версию кода, ax - 16, eax - 32. Вероятно eeax - это 64 :-)
Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 03 мар 2007, 20:33
Styopa
akahan писал(а):WM_CTLCLOR - это сообщение уже давно deprecated. Оно использовалось в 16 битных версиях кода. А сейчас уже вовсю 64 бита!!!
Чушь! Где вы это взяли?
MSDN писал(а):The WM_CTLCOLOR message is used in 16-bit versions of Windows to change the color scheme of list boxes, the list boxes of combo boxes, message boxes, button controls, edit controls, static controls, and dialog boxes.
Note For information related to this message and 32-bit versions of Windows, see Remarks.
Remarks
The WM_CTLCOLOR message has been replaced by more specific notifications in 32-bit versions of Windows. These replacements include the following:
WM_CTLCOLORBTN
WM_CTLCOLOREDIT
WM_CTLCOLORDLG
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC
Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 05 мар 2007, 17:26
WinMain
Лучше не перехватывать сообщения, а использовать элемент RichEdit. Для него есть специальное сообщение EM_SETBKGNDCOLOR.
Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 05 мар 2007, 21:52
Romeo
С RichEdit будет куча других проблем. Например контекстное меня для него не работает по умолчанию. Придётся создавать своё меню и писать для него обработчик. Использовать RichEdit - стрелять из пушки по воробьям в данном случае.
Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 06 мар 2007, 08:37
akahan
Сообщение от MSDN
The WM_CTLCOLOR message is used in 16-bit versions of Windows to change the color scheme of list boxes, the list boxes of combo boxes, message boxes, button controls, edit controls, static controls, and dialog boxes.
Note For information related to this message and 32-bit versions of Windows, see Remarks.
Remarks
The WM_CTLCOLOR message has been replaced by more specific notifications in 32-bit versions of Windows. These replacements include the following:
WM_CTLCOLORBTN
WM_CTLCOLOREDIT
WM_CTLCOLORDLG
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC
Даа! Перевожу!
Сообщение от MSDN
Сообщение WM_CTLCOLOR используетсяв 16-битных версиях Видовз для изменения цветовой схемы лист боксов, лист боксов комбо боксов, окон сообщений, кнопок, окон ввода текста, надписей, и диалогов.
Заметьте, для связывания этого сообщения и 32 битных версий Виндовз, смотрите пометки.
Пометки
Сообщение WM_CTLCOLOR замещено специфическими нотификациями в 32 битных версиях Виндовз. Эти замещения включают следующиее:
WM_CTLCOLORBTN
WM_CTLCOLOREDIT
WM_CTLCOLORDLG
WM_CTLCOLORLISTBOX
WM_CTLCOLORSCROLLBAR
WM_CTLCOLORSTATIC
Теперь это более разборчиво!

Re: Изменение цвета отрисовки шрифта Edit-контрола без использования диалога!
Добавлено: 06 мар 2007, 14:03
WinMain
Как вариант, могу предложить ещё один экзотический способ: использовать элемент ListView в стиле таблицы с редактируемым полем. В него потребуется вставка одного столбца и одной (а можно и нескольких) записей. В элементе ListView с помощью соответствующих сообщений задаётся цвет текста и цвет заднего фона.