|
0 / 0 / 0
Регистрация: 20.06.2013
Сообщений: 47
|
||||||
Перерисовка Edit control, смена фона на другой цвет (MFC)09.12.2013, 10:43. Показов 11281. Ответов 53
Метки нет (Все метки)
Здравствуйте, уважаемые Дамы и Господа.
Задаю вам вопрос, так как сам уже перегугли и перепробывал всё что мог, чтобы победить данную проблему. Цель, в данном окошке которое прикреплено (состоящее из 6-ти Edit control), настроить поля так, чтобы при вводе значение, которое не удоолетворяет в данный момент значения из других полей, перекрашивать его в другой цвет(например красный- цвет ошибки) и если другие поля тоже не удолетворяет значение из этого поля перекрашивтаь и их сразуже также. вот код как в данный момент я это реализую.
CEditNameSig_Dlg наследуемое и как раз то меню где находятся эти поля. То как выглядят поля показано в приложенном скрине. Ошибка моя заключается в том что вводя значение не соответствующее условию цвет фона перекрашивается. Но если убрать курсор с поля его фон снова становится белым. Плюс если навести курсор на другие поля то они тоже становятся красными как и нужно по условию(если они не довольны значением из начального поля ), но после убирания курсора как и первое поля снова становятся белым. Тоесть при убирание курсора цвет меняется на белый, а наведение становится нужным. Моя просьба, мольба, помочь решить мою проблему, так чтобы поля светились красным всегда при условии. Я буду вам очень признателен и благодарен за любые советы и коментарии)
0
|
||||||
| 09.12.2013, 10:43 | |
|
Ответы с готовыми решениями:
53
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||
| 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,876
|
|
| 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,876
|
|
| 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,876
|
||||||||||||
| 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,876
|
|||
| 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,876
|
||||
| 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,876
|
||
| 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)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|