Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать таблицу цветов, Программно заполнить ImageList 
:(
    Опции темы
Sphinx
Дата 23.6.2010, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



Общая задача: создать табличку с образцами цвета и текстовое название этого цвета.
Для этого использую ListView к которому прикручен ImageList. Сам ImageList заполняю с помощью ImageList_AddIcon. Но получается как-то не гибко и не практично - если нужно добавить какой-то цвет, то надо рисовать иконку заполненую этим цветом... Было бы лучше заполнять ImageList программно - нужен новый цвет, залил его в соответствующий элемент. Но как это сделать я не знаю.
Что посоветуете?

Это сообщение отредактировал(а) Sphinx - 23.6.2010, 07:52
PM MAIL   Вверх
GremlinProg
Дата 23.6.2010, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Sphinx @  23.6.2010,  09:30 Найти цитируемый пост)
Было бы лучше заполнять ImageList программно - нужен новый цвет, залил его в соответствующий элемент. Но как это сделать я не знаю.

можно перехватить у родителя NM_CUSTOMDRAW и рисовать иконку самому,
или добавить стиль LVS_OWNERDRAWFIXED, включить режим report view и перехватить у родителя WM_DRAWITEM, тогда иконки тоже можно рисовать программно


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sphinx
Дата 23.6.2010, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



Я представлял себе это немного проще - после ImageList_Create надо заполнить его нужными цветами.
Цитата(GremlinProg @  23.6.2010,  08:42 Найти цитируемый пост)
или добавить стиль LVS_OWNERDRAWFIXED, включить режим report view и перехватить у родителя WM_DRAWITEM, тогда иконки тоже можно рисовать 

Если я правильно понял, то для этого не нужно создавать ImageList ? А как рисовать, точнее как определить координаты области куда надо залить цвет? Или я ничего не понимаю...
PM MAIL   Вверх
GremlinProg
Дата 23.6.2010, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Sphinx @  23.6.2010,  10:56 Найти цитируемый пост)
Если я правильно понял, то для этого не нужно создавать ImageList ?

да, верно
Цитата(Sphinx @  23.6.2010,  10:56 Найти цитируемый пост)
А как рисовать, точнее как определить координаты области куда надо залить цвет?

вся информация по координатам приходит вместе с соответствующими сообщениями:
для WM_DRAWITEM - это DRAWITEMSTRUCT
для NM_CUSTOMDRAW - это NMLVCUSTOMDRAW


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sphinx
Дата 23.6.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



Спасибо, попробую разобраться. Но с примерчиком было бы проще.
PM MAIL   Вверх
GremlinProg
Дата 23.6.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106





--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sphinx
Дата 23.6.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



Не получается.
В обработчике NM_CUSTOMDRAW делается вызов только CDDS_PREPAINT. В нем, как и в примере ничего не делаю, только возврат CDRF_NOTIFYITEMDRAW. Все, дальше дело не идет, вызов CDDS_ITEMPREPAINT никогда не проходит.
PM MAIL   Вверх
GremlinProg
Дата 23.6.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Sphinx @  23.6.2010,  14:47 Найти цитируемый пост)
вызов CDDS_ITEMPREPAINT никогда не проходит

очевидно дело в выборе режима отображения:
Цитата(GremlinProg @  23.6.2010,  10:42 Найти цитируемый пост)
включить режим report view




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sphinx
Дата 23.6.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



Стоит флаг LVS_REPORT. Табличку я же вижу в текстовом виде.
Может еще какие-то флаги нужны.

Это сообщение отредактировал(а) Sphinx - 23.6.2010, 14:52
PM MAIL   Вверх
GremlinProg
Дата 23.6.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



а если попробовать вот так: http://msdn.microsoft.com/en-us/library/ms...stomdraw_topic4


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Sphinx
Дата 23.6.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.7.2006

Репутация: нет
Всего: нет



Попробую разобраться... но на первый взгляд не вижу принципиальных отличий.
PM MAIL   Вверх
Earnest
Дата 23.6.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Честно говоря, не понимаю зачем здесь CustomDraw\OwnerDraw. Разве что поучиться, ибо полезная весчь. А задачу я бы решала, как автор изначально предлагал: нужно добавить цвет - добавляем еще один элемент в ImageList, а потом в лист-вью. В чем проблема-то? Создаем совместимый битмап нужного размера, заполняем его нужным цветом (да хотя бы с помощью PatBlt), вставляем в ImageList... что еще?


--------------------
...
PM   Вверх
GremlinProg
Дата 23.6.2010, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Earnest @  23.6.2010,  17:29 Найти цитируемый пост)
Честно говоря, не понимаю зачем здесь CustomDraw\OwnerDraw. Разве что поучиться, ибо полезная весчь.

Цитата(Sphinx @  23.6.2010,  09:30 Найти цитируемый пост)
общая задача: создать табличку с образцами цвета и текстовое название этого цвета.

smile честно, я бы не использовал для этого ImageList,
не для того он нужен: можно ведь комаров бить и сковородкой, но ведь она не для этого предназначена

Добавлено через 4 минуты и 25 секунд
скажу больше: для такой задачи я бы использовал listbox


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Earnest
Дата 23.6.2010, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Ну, вопрос вкуса. Разрабатывать ImageList для такого случая точно бы не стоило, но он уже есть, так что пусть работает...  Да и у автора уже реализация была на его основе, совсем чуть-чуть изменить.
Чем меньше мне по кнопкам тыкать тем лучше - в самом общем случае ... smile 


--------------------
...
PM   Вверх
GremlinProg
Дата 23.6.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



нет, я непротив, можно оставить все как есть,
обычно это был бы правильный выбор: как спланировал - так и сделал, работодатель это оценит (если узнает smile ),
прсто вопрос был как раз о гибкости и что лучше


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1444 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.