|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||||||
Перерисовка Edit control, смена фона на другой цвет (MFC)09.12.2013, 10:43. Показов 10643. Ответов 53
Метки нет (Все метки)
Здравствуйте, уважаемые Дамы и Господа.
Задаю вам вопрос, так как сам уже перегугли и перепробывал всё что мог, чтобы победить данную проблему. Цель, в данном окошке которое прикреплено (состоящее из 6-ти Edit control), настроить поля так, чтобы при вводе значение, которое не удоолетворяет в данный момент значения из других полей, перекрашивать его в другой цвет(например красный- цвет ошибки) и если другие поля тоже не удолетворяет значение из этого поля перекрашивтаь и их сразуже также. вот код как в данный момент я это реализую.
CEditNameSig_Dlg наследуемое и как раз то меню где находятся эти поля. То как выглядят поля показано в приложенном скрине. Ошибка моя заключается в том что вводя значение не соответствующее условию цвет фона перекрашивается. Но если убрать курсор с поля его фон снова становится белым. Плюс если навести курсор на другие поля то они тоже становятся красными как и нужно по условию(если они не довольны значением из начального поля ), но после убирания курсора как и первое поля снова становятся белым. Тоесть при убирание курсора цвет меняется на белый, а наведение становится нужным. Моя просьба, мольба, помочь решить мою проблему, так чтобы поля светились красным всегда при условии. Я буду вам очень признателен и благодарен за любые советы и коментарии)
0
|
||||||
| 09.12.2013, 10:43 | |
|
Ответы с готовыми решениями:
53
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
|
|||
| 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
|
||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
|
|
| 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
|
|||||||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
|
|
| 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
|
||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
|
||||||||||||
| 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
|
||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
|
|||
| 11.12.2013, 13:27 | |||
|
просто верни кисть и увидишь что произойдет запусти мой проект и увидишь там нет никакого моргания, хотя цвет меняется 5 раз в секунду а если изменишь листинг с
1
|
|||
|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||
| 11.12.2013, 14:40 [ТС] | ||
|
а если изменить листинг то фон становится не прозрачным а чёрным. мне непонятно почему в том примере который мне скинули у человека (m_pEditBkBrush->GetSafeHandle()); работает нормально а у меня нет...(
0
|
||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
|
||||
| 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
|
||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
|
||
| 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 | |
|
Помогаю со студенческими работами здесь
40
Цвет фона, цвет текста в определённом EDIT и шрифт Edit Control в MFC (VS2005)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|