Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > CEdit Background color


Автор: rainbow86 6.3.2006, 17:21
smile


Как изменить цвет background'а в CEdit?
Чего-то я не нашел ничего. smile

Автор: Earnest 6.3.2006, 19:06
Нужно обрабатывать сообщение WM_CTLCOLOREDIT.
А еще - поискать в форуме, было уже про это.

Автор: rainbow86 6.3.2006, 22:48
Цитата(Earnest @ 6.3.2006, 19:06 Найти цитируемый пост)
А еще - поискать в форуме, было уже про это.


Вот что я нашел на форуме:

Код

BOOL CALLBACK somewndproc(hwnd, Msg, wParam, lParam)    
{    
     switch(Msg)    
    {    
          case WM_CTLCOLORBTN:    
          case WM_CTLCOLOREDIT:    
          case WM_CTLCOLORSTATIC:    
                return HANDLE_WM_CTLCOLORSTATIC(hwnd, wParam, lParam, Func_OnCtlColor);    
    }    
}    
HBRUSH Func_OnCtlColor(hwnd, hdc, hwndChild, type)    
{    
    switch(type)    
    {    
        case CTLCOLOR_STATIC:    
        case CTLCOLOR_BTN:    
        case CTLCOLOR_EDIT:    
            SetTextColor(hdc, RGB(0, 127, 0));    
            SetBKMode(hdc, TRANSPARENT);    
            return SomeBrush; //return NULL;    
    }    
    return SomeBrush2; //return NULL;    
}



Но все таки это не совсем то. Здесь edit окрашивается в цвет кисти, но когда начинаешь печетать, под символами появляется белый фон, а где нет символов там остается цвет кисти. Мне же надо поменять цвет фона в edit'е. Пробовал SetBkColor(), но по моему он вообще ничего не делает????

Автор: Earnest 7.3.2006, 15:14
SetBkColor ничего не делает, если стоит SetBkMode (TRANSPARENT).
Попробуй SetBkMode не ставить, а вот SetBkColor вызови.

Автор: rainbow86 8.3.2006, 11:10

Я уже перепробовал и с SetBkMode (TRANSPARENT) и без, но все равно я не вижу никакого влияние SetBkColor(). Кто-нибудь знает как он работает???

smile

Автор: rainbow86 8.3.2006, 14:01

Эту проблему решил. Теперь появилась другая. Дело в том что мне нужно закрашивать edit когда у него нет фокуса. А он обновляется только тогда когда у него есть фокус или когда обновляется все окно.Когда фокус переходит в другое окно мне надо заставить его обновиться.

smile

Как правилней это сделать?

Автор: Earnest 9.3.2006, 09:14
Есть такой метод Invalidate. Когда обновить окно, вызывай его. Или - для части окна - InvalidateRect.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)