Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852

Цвет фона

01.04.2011, 21:59. Показов 2006. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
необходимо чтобы менялся цвет фона статика в зависимости от переменной
сделал так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HBRUSH CwndLevel::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CWnd::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO:  Измените любые атрибуты DC
 if(pWnd==&stLevelTop)
 {
   
    hbr=::CreateSolidBrush(RGB(0,ch->Value,0));
    
 }
    return hbr;
}
все работает но программа виснет оно и понятно утечка ресурсов
второй вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HBRUSH CwndLevel::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CWnd::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO:  Измените любые атрибуты DC
 if(pWnd==&stLevelTop)
 {
   
     ::DeleteObject((HBRUSH)hbr);
    hbr=::CreateSolidBrush(RGB(0,ch->Value,0));
 }
    return hbr;
}
Утечка ресурсов
DeleteObject((HBRUSH)hbr);
не срабатывает
Почему ??? Приатачен??? Как снять???
решил через класс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HBRUSH CwndLevel::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CWnd::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO:  Измените любые атрибуты DC
 if(pWnd==&stLevelTop)
 {
       CBrush brLevel;
    brLevel.CreateSolidBrush(RGB(0,ch->Value,0));
 
    hbr=(HBRUSH)brLevel;
 
 }
    return hbr;
}
Не работает. Понятно brLevel разрушается нет никакой кисти чево вы хотели?
объявляю brLevel членом класса

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HBRUSH CwndLevel::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CWnd::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO:  Измените любые атрибуты DC
 if(pWnd==&stLevelTop)
 {
    brLevel.CreateSolidBrush(RGB(0,ch->Value,0));
    hbr=(HBRUSH)brLevel;
 
 }
    return hbr;
}
Утечка ресурсов

ну и последний вариант рабочий
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HBRUSH CwndLevel::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CWnd::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO:  Измените любые атрибуты DC
 if(pWnd==&stLevelTop)
 {
    brLevel.DeleteObject();
    brLevel.CreateSolidBrush(RGB(0,ch->Value,0));
    hbr=(HBRUSH)brLevel;
 }
    return hbr;
}
удаляю кисть и создаю заново
Но как то не комильфо!
Есть ли лучшее предложения ??
можно ли поменять цвет у созданой кисти???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2011, 21:59
Ответы с готовыми решениями:

Изменить цвет текста и фона в консоли
как можно сделать цвет в консоле ? и можно ли вообще ?

Как изменить цвет фона в окне
подскажите пожалуйста как в изменить цвет фона окна в visual c++?

Как поменять цвет фона для кнопки (CButton)?
Есть кнопка IDC_BUTTON1, которой соответствует переменная m_IDC_BUTTON1 типа CButton. Для этой кнопки я изменил высоту и ширину текста в...

8
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2011, 07:10
Сделай CBrush членом класса. Будешь создавать его всего один раз и удалится оно при разрушении окна.
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
02.04.2011, 07:11
по второму варианту
Do not delete a drawing object (pen or brush) while it is still selected into a DC.

по последнему (я так понял зависит от ch->Value), так не катит:
C++
1
2
3
4
5
6
7
8
9
10
...
static BYTE byGreenOld;
if (byGreenOld != ch->Value)
{
    byGreenOld = ch->Value;
    brLevel.DeleteObject();
    brLevel.CreateSolidBrush(RGB(0,ch->Value,0));
}
hbr=(HBRUSH)brLevel;
...
brLevel тоже, наверное static можно сделать
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
02.04.2011, 07:53  [ТС]
Deviaphan,
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сделай CBrush членом класса
Цитата Сообщение от ValeryS Посмотреть сообщение
объявляю brLevel членом класса


Цитата Сообщение от Deviaphan Посмотреть сообщение
Будешь создавать его всего один раз
Цитата Сообщение от ValeryS Посмотреть сообщение
необходимо чтобы менялся цвет фона статика в зависимости от переменной
переменная на то и переменная чтобы менять свои значения
из-за этого меняется цвет(от черного до зеленого)

Добавлено через 9 минут
bigredcat,
ну так я и понял приатачена(выбрана) хрен удалишь
но к чему она приатачена
Цитата Сообщение от ValeryS Посмотреть сообщение
OnCtlColor(CDC* pDC
к этому pDC ???
по твоему варианту не понял в чем выигрыш
как разрушалась кисть так и разрушается
добавится только лишняя переменная и проверка
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2011, 07:54
Пичалька, да.
Сделай как член класса или static и разрушай-пересоздавай кисть. Почему бы и нет.

В принципе, ни что не мешает переопределить функцию отрисовки контрола.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
02.04.2011, 07:58  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сделай как член класса или static и разрушай-пересоздавай кисть
ну так я и сделал(последний вариант)
Цитата Сообщение от Deviaphan Посмотреть сообщение
В принципе, ни что не мешает переопределить функцию отрисовки контрола.
никто не мешает (кроме лишней работы)
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
02.04.2011, 08:01
Цитата Сообщение от ValeryS Посмотреть сообщение
ну так я и понял приатачена(выбрана) хрен удалишь
но к чему она приатачена
к этому pDC ???
Да. Она же во 2-м варианте остается выбранной в контексте этого устройства.

Цитата Сообщение от ValeryS Посмотреть сообщение
по твоему варианту не понял в чем выигрыш
как разрушалась кисть так и разрушается
добавится только лишняя переменная и проверка
Ну это я не правильно понял задачу.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
02.04.2011, 08:21  [ТС]
Ну Виндос ну дает
удалить выбранное нельзя
а создать в выбранном с потерей предыдущего пожалуйста
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
02.04.2011, 09:14
А что насчет SetBkColor? Или SetDCBrushColor? Вам там и удалять то ничего не требуется.

Добавлено через 10 минут
Кстати, по поводу
C++
1
2
3
4
5
6
7
static BYTE byGreenOld;
if (byGreenOld != ch->Value)
{
    // Будет выполняться, только когда реально цвет нужно изменить,
    // так что выигрышь все-таки есть
    ...
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2011, 09:14
Помогаю со студенческими работами здесь

Перерисовка Edit control, смена фона на другой цвет (MFC)
Здравствуйте, уважаемые Дамы и Господа. Задаю вам вопрос, так как сам уже перегугли и перепробывал всё что мог, чтобы победить данную...

Ввести символы с клавиатуры. Цвет символов - белый, цвет фона - синий
Нужно написать программу, которая позволит вводить символы из клавиатуры, цвет символов - белый, цвет фона - синий. Я в ассемблере...

Задан один цвет, после запуска цвет фона у элемента другой
Добрый день. Разбираюсь с чужой программе. Столкнулся с таким моментом, когда у элемента по умолчанию был белый цвет фона, потом программно...

Как поменять цвет фона кнопки и цвет текста на кнопке?
имеется код: //Кнопка "Выход" CreateWindow(TEXT("button"), TEXT("Выход"), WS_CHILD|WS_VISIBLE|BS_OWNERDRAW, 170, 180, 120, 30, hWnd,...

Цвет фона, цвет текста в определённом EDIT и шрифт
Сначала опишу чего добиваюсь: Для всех(кроме 1го, заблокированного от ввода) сделать текст текста серым. У заблокированного EDIT'а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru