Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.95.38] |
|
Сообщ.
#1
,
|
|
|
Не могу установить свой цвет фона едита, сообщение WM_CTLCOLOREDIT приходит, возвращаю хендл на кисть, но почему-то цвет остаётся стандартным?
|
Сообщ.
#2
,
|
|
|
У меня работает...
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_EDIT) { hbr = CreateSolidBrush (RGB (0, 255, 0)); } return hbr; } Обрабатываю сообщение WM_CTLCOLOR Кстати, про WM_CTLCOLOREDIT волшебнику ничего не известно. |
Сообщ.
#3
,
|
|
|
Дело в том, что я пишу без использования МФЦ, а это сообщение, на сколько я понял есть только в нём, так что же мне "ловить" в чистом АПИ?
case WM_CTLCOLOREDIT: if((HWND)lParam == hEdit) { SetTextColor((HDC)wParam, RGB(255, 0, 0)); SetBkColor((HDC)wParam, RGB(0, 255, 0)); return (LRESULT)CreateSolidBrush(RGB(0, 0, 255)); } break; Вот что интересно, после этого кода меняется цвет текста, цвет бэкграунда для текста, а фон едита остаётся стандартным! Что я забыл? |
Сообщ.
#4
,
|
|
|
Цитата MSDN If a dialog box procedure handles this message, the dialog box procedure should cast the desired return value to a BOOL and return the value directly Может тогда надо сделать так: case WM_CTLCOLOREDIT: if((HWND)lParam == hEdit) { SetTextColor((HDC)wParam, RGB(255, 0, 0)); SetBkColor((HDC)wParam, RGB(0, 255, 0)); return (BOOL)CreateSolidBrush(RGB(0, 0, 255)); // !!!! } break; |
Сообщ.
#5
,
|
|
|
Не, это не поможет. Блин, чё за ...? Какие-нибудь другие предложения есть?
|
Сообщ.
#6
,
|
|
|
Все тема закрыта!
ЗЫ. и MSDN порой гонит! |
Сообщ.
#7
,
|
|
|
так в чем же собака порылась?
|
Сообщ.
#8
,
|
|
|
Цитата Fester, 3.12.04, 21:25, 532005 так в чем же собака порылась? MSDN, как ..., прочитай и сделай наоборот Написанно: Цитата MSDN WM_CTLCOLOREDIT ... If a dialog box procedure handles this message, it should cast the desired return value to a BOOL and return the value directly. If the dialog box procedure returns FALSE, then default message handling is performed. The DWL_MSGRESULT value set by the SetWindowLong function is ignored. Сделеал через SetWindowLong(..., DWL_MSGRESULT, кисть) - всё заработало! ЗЫ. может к eVS 3.0 мсдн наспех клепали, вот и ошибочка вышла? А то очепяток я там кучу видел... |