|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|
vc++ Цвет эдитов30.01.2013, 02:14. Показов 1401. Ответов 16
Метки нет (Все метки)
Здравствуйте, коллеги!
Скажу сразу, в теме только начал разбираться, потому если вопрос дилетантский, простите, не со зла. Стоит задача: создать несколько эдитов, задать им некий цвет, причем эдит, активный в данный момент (тот, на котором фокус?) должен быть выделен другим цветом. Что было сделано. 1. Прописал в дефайнах все IDC_MYEDIT... 2. Сделал сабклассинг от CEdit, переопределил в нем карту сообщений (нужна реакция на tab) 3. В CMainWnd прописал Message_Map, в нем - OnCtlColor, где по GetDlgCtrlID "раскрасил" все мои эдиты В итоге все работает, но... При выборе любого эдита он послушно перекрашивается с желтого на красный, но эдит, который ПЕРЕСТАЛ быть активным тоже остается красным... А должен был бы вернуться в желтое... Голову сломал (рекомендации "гуглите" или "MSDN`те от лукавого, потому как это уже было сделано!). Понимаю, что ответ где-то на поверхности, но найти не смог. Буду благодарен за помощь! P.S. Если важно, студия 2010 EN SP1, Win8 x64
0
|
|
| 30.01.2013, 02:14 | |
|
Ответы с готовыми решениями:
16
проверка эдитов на пустоту |
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
||||||||||||||
| 30.01.2013, 07:42 | ||||||||||||||
|
делаешь красным WM_SETFOCUS http://vsokovikov.narod.ru/New... tfocus.htm делаешь желтым WM_KILLFOCUS http://vsokovikov.narod.ru/New... lfocus.htm Добавлено через 1 минуту Добавлено через 59 минут на тебе класс ValEdit.h Кликните здесь для просмотра всего текста
ValEdit.cpp Кликните здесь для просмотра всего текста
2
|
||||||||||||||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|||||||||||
| 30.01.2013, 18:04 [ТС] | |||||||||||
|
Спасибо за участие.
Видать, туповат стал на старости лет - что-то не получается именно желаемое. При выборе одного из контролов мышкой он становится красным (т.е. WM_SET_FOCUS отрабатывает), но тот, с которого был перенесен фокус, тоже остается красным. Причем событие отлавливается (если ставлю в KILL_FOCUS afx_message, оно выскакивает дважды), но цвет не меняется. Что я не так делаю? CMyEdit.h Кликните здесь для просмотра всего текста
CMyEdit.cpp Кликните здесь для просмотра всего текста
Если нужно, ссылка на все *.h и *.cpp проекта: http://rghost.ru/43421922
0
|
|||||||||||
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
|||
| 30.01.2013, 19:08 | |||
|
С классом CMyEdit все в порядке
но мне не нравится твой CMainWnd во первых выделяешь память а не удаляешь во вторых в конструкторе нельзя создавать окна конструктор не возвращает значения и если ты не удачно создал окно то не сможешь сообщить программе о неудаче не зря в MFC разделен конструктор и Create в третьих не зарегистрирован класс окна
создай проект при помощи волшебника создай одноконный без поддержки документ/вид а лучше вообще диалог Добавлено через 2 минуты
0
|
|||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|
| 30.01.2013, 19:40 [ТС] | |
|
Красным выделены несколько ячеек. Курсор (и фокус) в одной из них.
Когда сворачиваю и разворачиваю окно, фокус исчезает и все ячейки - желтые. Спасибо за замечания, но я только начинаю грызть гранит науки, и подозреваю, не все так кошерно, как хотелось бы. Костяк брался с сайта firststep.ru
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
||
| 30.01.2013, 20:10 | ||
|
тебе не приходит ON_WM_CTLCOLOR_REFLECT() что то не ладно с майном еще раз попробуй создать волшебником(wizard) и посмотри как он сгенерирует файлы Добавлено через 2 минуты самое тупое что могу предложить это добавить в конец OnKillFocus Invalidate();
0
|
||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|
| 30.01.2013, 20:16 [ТС] | |
|
Заметил вот что.
Когда для проверки в KillFocus ставлю afx_message, то сообщение выскакивает дважды. Я боюсь, что на визард у меня таланта не хватит. И еще - в мэйне стоял раньше OnCtlColor, а в CMyEdit - перехватчик нажатия таба, и там было SetFocus Я закоментил, но мало ли....
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
||
| 30.01.2013, 20:50 | ||
![]() меню файл создать проект выбрать MFC проект в появившемся окне нажать далее выбрать тип проекта выбираешь SDI галочку на поддержка документ/вид снять можешь нажать готово все проект готов нажимаешь на запустить и любуешься окном когда налюбовался закрываешь и начинаешь в МайнФрейм запихивать что тебе надо
0
|
||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|
| 31.01.2013, 16:33 [ТС] | |
|
Я человек старый и ленивый :-)))))
А если серьезно, понять, почему не работает то, что должно работать В любом случае, спасибо за помощь - пинок в нужном направлении Вашими молитвами сделан. Через полчасика попробую с Invalidate О результатах отпишусь Добавлено через 1 минуту Странно, что SetFocus отлавливается замечательно, а вот Kill - нет :-(((( Добавлено через 10 минут И нельзя ли Kill_Focus и Set_Focus вызывать из MainWnd? Добавлено через 26 минут УРРРРРРРЯ!!! Invalidate() в конце KILL_FOCUS спас, все работает как часы!!! Огромное спасибо и искрений поклон! Добавлено через 18 часов 58 минут Последнее, не подскажите, можно ли как-то таким методом покрасить не все эдиты? К примеру, эдит с ID 10 чтоб был другим цветом?
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
|||||||||||||
| 31.01.2013, 18:10 | |||||||||||||
![]() Добавлено через 4 минуты
и при создании контрола задавай цвет а потом сделай так
0
|
|||||||||||||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|
| 31.01.2013, 22:15 [ТС] | |
|
О другом классе и подумал изначально.
Сначала взыграла жадность (зачем плодить классы), а потом вспомнил, что нам говорили на курсах (препод - умница) - все, что можно выделить в отдельный класс - выделяйте. Работает! Искреннее спасибо, Вы РЕАЛЬНО помогаете людям Я Ваш должник! P.S. Тему можно считать закрытой, дальше буду плыть сам.
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
||||||||
| 31.01.2013, 22:53 | ||||||||
|
читай что я добавил поправь свой класс добавь две переменные цвет фокуса и цвет нет фокуса и при создании контролов присвой им значения тогда хоть сто едитов будут иметь свой цвет( и все один класс) Добавлено через 1 минуту вот так правильно
0
|
||||||||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|
| 31.01.2013, 23:01 [ТС] | |
|
"при создании контролов присвой им значения"
Имеется ввиду, что-то типа: c11=new CMyEdit(247,242,156)? А в конструкторе CMyEdit прописать: CMyEdit::CMyEdit(int t1,int t2,int t3) { colorBk=RGB(t1,t2,t3); } Так?
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
|||||||
| 31.01.2013, 23:06 | |||||||
|
примерно так
0
|
|||||||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
|
| 01.02.2013, 00:48 [ТС] | |
|
Да, Ваша схема много проще моей
Я еще не до конца "проникся" философией C++ Но еще не все потеряно, урок понял Добавлено через 1 час 39 минут Получилось, но есть тонкость. Сделал, как Вы посоветовали, но при создании c11 берется один цвет, который указывается в конструкторе. И что делать, если одни эдиты ИЗНАЧАЛЬНО должны быть желтыми, а другие - красными (когда события с фокусом еще не наступили) - неясно. Может быть передавать в конструктор индекс c11=new CMyEdit(1) а потом в конструкторе анализировать? Но тогда ведь можно и ColorFocus/ColorNoFocus можно присваивать там же...
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
|||||||||||||||||||||
| 01.02.2013, 00:56 | |||||||||||||||||||||
|
можно и через конструктор
тогда цвета можешь по ходу программы менять
0
|
|||||||||||||||||||||
|
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 39
|
||||||
| 01.02.2013, 02:23 [ТС] | ||||||
|
Теперь все работает.
Прописал в хедэре CMainWnd: COLORREF z1,z2; в конструкторе его же z1=RGB(232,156,166);z2=RGB(247,242,156); и при создании эдита просто пишу cTitul=new CMyEdit(z1,z1); Единственное, что осталось чуть-чуть недоделанное, это реакция при нажатии на tab. Вот код: Кликните здесь для просмотра всего текста
Фокус переходит с ячейки на ячейку, но подсветки красным нет, она появляется при нажатии на любую кнопку. Если это поправимо без потери крови, буду рад совету. Нет - ну и Бог с ним, так тоже можно оставить
0
|
||||||
| 01.02.2013, 02:23 | |
|
Помогаю со студенческими работами здесь
17
Динамический вывод эдитов Работа с Динамическим массивом эдитов как посчитать сумму из эдитов Бесконечное кол-во скролящихся эдитов :) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|