Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменять фон EditBox'a  (Прочитано 19189 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nux
Интересующийся

ru
Offline Offline

« : 04-08-2007 16:39 » 

Нужно изменить фон EditBox'a на заданный цвет по нажатию кнопки. Одна кнопка <-> один EditBox.
ON_WM_CTLCOLOR меняет все и сразу. Ну, по крайней мере, я могу только так) А черт его знает...

Как быть, подскажите, плз.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 04-08-2007 17:42 » 

Setbkсolor(...) не подойдет?
Записан

ещё один вопрос ...
nux
Интересующийся

ru
Offline Offline

« Ответ #2 : 04-08-2007 18:13 » 

для EditBox'a - нет(
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 05-08-2007 05:46 » 

Цитата
afx_msg HBRUSH OnCtlColor(
   CDC* pDC,
   CWnd* pWnd,
   UINT nCtlColor
);

pDC - Contains a pointer to the display context for the child window. May be temporary.

pWnd - Contains a pointer to the control asking for the color. May be temporary.

nCtlColor - Contains one of the following values, specifying the type of control:
CTLCOLOR_BTN   Button control
CTLCOLOR_DLG   Dialog box
CTLCOLOR_EDIT   Edit control
CTLCOLOR_LISTBOX   List-box control
CTLCOLOR_MSGBOX   Message box
CTLCOLOR_SCROLLBAR   Scroll-bar control
CTLCOLOR_STATIC   Static control

Return Value
OnCtlColor must return a handle to the brush that is to be used for painting the control background.

нужно проверить , чтобы
nCtlColor == CTLCOLOR_EDIT
и
pWnd->m_hWnd == хендл твоего контрола

я так понимаю Улыбаюсь
Записан

nux
Интересующийся

ru
Offline Offline

« Ответ #4 : 05-08-2007 20:29 » 

да, точно, красятся поименно.

А привязать это дело к нажатию кнопки можно как-нибудь?
Сейчас ни все выкрашиваются при запуске.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 05-08-2007 20:38 » 

nux, конечно можно. Заведи какой нибудь флажок и при нажатии кнопки - установи его, и обнови окно. А в OnCtlColor проверяй флаг и делай, как требуется в зависимости от его состояния
Записан

nux
Интересующийся

ru
Offline Offline

« Ответ #6 : 06-08-2007 06:20 » new

Проверяла состояние кнопки по GetState() - переставало отрисовываться хоть что-то.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 06-08-2007 06:28 » 

nux, поставь вместо кнопки чекбокс Ага

-------
кстати, я предлагал не состояние кнопки проверять, а по нажатию кнопки флаг в программе выставить и уже его проверять
Записан

nux
Интересующийся

ru
Offline Offline

« Ответ #8 : 06-08-2007 09:20 » 

У меня и есть чек-бокс в кнопочном стиле Что, съел? ну, оговорилась
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 06-08-2007 09:26 » 

nux, показывай код, как проверяешь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 06-08-2007 14:31 » 

Аааа GetCheck вместо GetState не работает?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 06-08-2007 14:54 » 

а, точно, GetCheck же надо ))  Всё я перепутал опять
Записан

salex
Гость
« Ответ #12 : 11-12-2007 22:47 » 

    // Переменные для хранения цвета текста и цвета фона редактора
    COLORREF textColor, bkColor;
    // Кисть
    CBrush *brush;
   // Обработчик сообщения о рисовании элементов управления
   afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
        // Изменение фона редактора
   afx_msg void OnColorsBackgroundcolor();
        // Изменение цвета текста редактора
   afx_msg void OnColorsTextcolor();
 // Начальная инициализация
    brush = new CBrush;
    textColor = 0;          // Черный цвет
    bkColor = RGB(255, 255, 255);   // Белый цвет
    // Создание "сплошной" кисти
    brush->CreateSolidBrush(bkColor);
   
    // Если текущий элемент текстовое поле редактора
    if(nCtlColor == CTLCOLOR_EDIT && pWnd->GetDlgCtrlID() == IDC_View)   
    {
        delete brush;
        // Создание новой кисти
        brush = new CBrush;
        brush->CreateSolidBrush(bkColor);
        // Установка цвета фона "под буквами"
        pDC->SetBkColor(bkColor);
        // Установка цвета текста
        pDC->SetTextColor(textColor);
        // "Подменяем" кисть (возвращаем свою)
        return *brush;
    }

    if(nCtlColor == CTLCOLOR_STATIC && pWnd->GetDlgCtrlID() == IDC_STAT)   
    {
        delete brush;
        // Создание новой кисти
        brush = new CBrush;
        // Создание кисти со штриховкой
        brush->CreateHatchBrush(HS_DIAGCROSS, textColor);
        // Установка цвета фона "под штриховкой"
        pDC->SetBkColor(bkColor);
        // Установка цвета текста
        pDC->SetTextColor(textColor);
        // "Подменяем" кисть (возвращаем свою)
        return *brush;
    }

    if(nCtlColor == CTLCOLOR_DLG)   
    {
        delete brush;
        // Создание новой кисти
        brush = new CBrush;
        // Создание кисти с инвертированным цветом фона редактора
        brush->CreateSolidBrush(0xFFFFFF - bkColor);
        // "Подменяем" кисть (возвращаем свою)
        return *brush;
    }

    return hbr;
}

void *****::OnColorsBackgroundcolor()
{
    CColorDialog colDlg;
    if(colDlg.DoModal() == IDOK)
    {
        // Изменение цвета фона
        bkColor = colDlg.GetColor();
        // Перерисовка текстового поля со стиранием фона
        Invalidate(true);
    }
}

void *****::OnColorsTextcolor()
{
    CColorDialog colDlg;
    if(colDlg.DoModal() == IDOK)
    {
        // Изменение цвета текста
        textColor = colDlg.GetColor();
        // Перерисовка текстового поля без стирания фона
        Invalidate(false);
    }
}
вот проект в целом!Зачёт 4!

* TextEditor.rar (37.13 Кб - загружено 860 раз.)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 12-12-2007 04:31 » 

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 в деструкторе не забыл ?
« Последнее редактирование: 12-12-2007 04:37 от Алексей1153++ » Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines