|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||||||
Перерисовка Edit control, смена фона на другой цвет (MFC)09.12.2013, 10:43. Показов 11108. Ответов 53
Метки нет (Все метки)
Здравствуйте, уважаемые Дамы и Господа.
Задаю вам вопрос, так как сам уже перегугли и перепробывал всё что мог, чтобы победить данную проблему. Цель, в данном окошке которое прикреплено (состоящее из 6-ти Edit control), настроить поля так, чтобы при вводе значение, которое не удоолетворяет в данный момент значения из других полей, перекрашивать его в другой цвет(например красный- цвет ошибки) и если другие поля тоже не удолетворяет значение из этого поля перекрашивтаь и их сразуже также. вот код как в данный момент я это реализую.
CEditNameSig_Dlg наследуемое и как раз то меню где находятся эти поля. То как выглядят поля показано в приложенном скрине. Ошибка моя заключается в том что вводя значение не соответствующее условию цвет фона перекрашивается. Но если убрать курсор с поля его фон снова становится белым. Плюс если навести курсор на другие поля то они тоже становятся красными как и нужно по условию(если они не довольны значением из начального поля ), но после убирания курсора как и первое поля снова становятся белым. Тоесть при убирание курсора цвет меняется на белый, а наведение становится нужным. Моя просьба, мольба, помочь решить мою проблему, так чтобы поля светились красным всегда при условии. Я буду вам очень признателен и благодарен за любые советы и коментарии)
0
|
||||||
| 09.12.2013, 10:43 | |
|
Ответы с готовыми решениями:
53
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|||
| 10.12.2013, 18:15 | |||
|
тогда ой ![]() кто родитель у CEditNameSig_Dlg?
0
|
|||
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 08:27 [ТС] | ||
|
вот так) как и говорил в начале. а эдиты уже в CEditNameSig_Dlg
0
|
||
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 09:48 [ТС] | ||
|
Что я мог сделать не так?)
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|
| 11.12.2013, 09:48 | |
|
rusianvodka,
запутал ты меня совсем ![]() я и повелся ![]() но теперь разобрался OnCtlColor нужно переопределять у Диалога, он отвечает за прорисовку своих контролов а у контрола нужно( или не нужно) будет переопределить ownerDraw, (сам рисуешь ) но Едит вроде его не подддерживает я прошу прошения за то, что ввел в заблуждение
0
|
|
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 10:04 [ТС] | ||
|
в данный момент у меня имется такое HBRUSH CEditNameSig_Dlg ::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) где и происходят все действия с закрашиванием фона эдитов. как я п онимаю теперь мне нужно копать и смотреть в сторону ownerDraw и customdraw
0
|
||
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
| 11.12.2013, 10:10 | |
|
у меня такое ощущение, что у вас что-то перебивает отрисовку этих editов или их значение
как-будто у вас при потере фокуса все поля или обнуляются или не подтягиваются.. почему-то думаю что у вас косяк в OnCommand, вы там меняете значения переменных, а это не оч красиво. попробуйте закоментировать весь код до тех пор пока не начнет работать так как надо. и начните с OnCommand и PreTranslateMessage(не помню, есть ли это у вас)
0
|
|
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
|||||||
| 11.12.2013, 10:21 [ТС] | |||||||
|
PreTranslateMessage не нашёл у себя, поэтому добавил как у вас. Но что сним, что без него одинакова. OnCommand вот он, но как я не смотрел не нашёл в нём ничего такого что могло трогать перерисовку.
0
|
|||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|
| 11.12.2013, 10:23 | |
|
rusianvodka,
держи проект написан за пол-часа левой пяткой 7 эдитов переливаются цветами радуги вопросы будут отвечу, но по моему все понятно, большую часть кода написал "волшебник"
1
|
|
| 11.12.2013, 10:44 | |
|
Не по теме: delete
0
|
|
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 11:39 [ТС] | ||
|
Методом проб и ошибок нашёл что это всё связанно с return (HBRUSH)(m_pEditBkBrush->GetSafeHandle()); в каждом шаге при перекраске. Хотя изучив пример уважаемого Aloirа я понял что у нас всё идентично)) сейчас пытаюсь понять что может ещё влиять на это.
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
||||||||||||
| 11.12.2013, 12:07 | ||||||||||||
|
возвращай созданную кисть у меня например
мой код в таком случае
1
|
||||||||||||
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 12:22 [ТС] | ||
|
Так как без неё, когда курсор не в эдите, цвет пропадает.
0
|
||
|
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
|
|
| 11.12.2013, 12:36 | |
|
имхо: начинайте коментить код, до минимума. должен вылезти косяк.
можно посмотреть еще с помощью SPY++, что там приходит.. но тут будет посложнее думаю чем закоментить
1
|
|
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 12:56 [ТС] | ||
|
return (HBRUSH)(m_pEditBkBrush->GetSafeHandle()); точнее в GetSafeHandle() так как если возвращать только m_pEditBkBrush то фон при переводе курсора становится снова белым, а если делать окно активным то становится нужного цвета. Но если добавить GetSafeHandle, то всё работает как надо только при проведение курсором по эдиту не делая его активным он меняет цвет. в вашем примере я заметил примерно тоже только там цвет не всего фона меняется, а появляются иногда полоски красного, на фоне эдита толщиной один пиксель и длиной в всю ширину. Добавлено через 8 минут я скидывал скрины своего меню. может быть дело в нём?
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|||
| 11.12.2013, 13:27 | |||
|
просто верни кисть и увидишь что произойдет запусти мой проект и увидишь там нет никакого моргания, хотя цвет меняется 5 раз в секунду а если изменишь листинг с
1
|
|||
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 14:40 [ТС] | ||
|
а если изменить листинг то фон становится не прозрачным а чёрным. мне непонятно почему в том примере который мне скинули у человека (m_pEditBkBrush->GetSafeHandle()); работает нормально а у меня нет...(
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
||||
| 11.12.2013, 14:46 | ||||
|
http://msdn.microsoft.com/en-u... 5tbwa.aspx обрати внимание
еще раз повторю выброси GetSafeHandle()
0
|
||||
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 15:11 [ТС] | ||
|
pDC->SetBkColor(TRANSPARENT); а если так то цвет фона меняется как только окно становится не активным на белое при том что должно быть постоянно красным. return (HBRUSH)(m_pEditBkBrush);
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
||
| 11.12.2013, 17:41 | ||
|
rusianvodka,
покажи свой OnCtlColor как он сейчас выглядит Добавлено через 1 минуту диалог? или CEdit?
0
|
||
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
|||||||
| 12.12.2013, 09:20 [ТС] | |||||||
|
OnCtlColor
Добавлено через 8 минут
0
|
|||||||
| 12.12.2013, 09:20 | |
|
Цвет фона, цвет текста в определённом EDIT и шрифт Edit Control в MFC (VS2005)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|