![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Sphinx |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.7.2006 Репутация: нет Всего: нет |
Общая задача: создать табличку с образцами цвета и текстовое название этого цвета.
Для этого использую ListView к которому прикручен ImageList. Сам ImageList заполняю с помощью ImageList_AddIcon. Но получается как-то не гибко и не практично - если нужно добавить какой-то цвет, то надо рисовать иконку заполненую этим цветом... Было бы лучше заполнять ImageList программно - нужен новый цвет, залил его в соответствующий элемент. Но как это сделать я не знаю. Что посоветуете? Это сообщение отредактировал(а) Sphinx - 23.6.2010, 07:52 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
можно перехватить у родителя NM_CUSTOMDRAW и рисовать иконку самому, или добавить стиль LVS_OWNERDRAWFIXED, включить режим report view и перехватить у родителя WM_DRAWITEM, тогда иконки тоже можно рисовать программно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Sphinx |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.7.2006 Репутация: нет Всего: нет |
Я представлял себе это немного проще - после ImageList_Create надо заполнить его нужными цветами.
Если я правильно понял, то для этого не нужно создавать ImageList ? А как рисовать, точнее как определить координаты области куда надо залить цвет? Или я ничего не понимаю... |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
да, верно
вся информация по координатам приходит вместе с соответствующими сообщениями: для WM_DRAWITEM - это DRAWITEMSTRUCT для NM_CUSTOMDRAW - это NMLVCUSTOMDRAW -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
Sphinx |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.7.2006 Репутация: нет Всего: нет |
Спасибо, попробую разобраться. Но с примерчиком было бы проще.
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Sphinx |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.7.2006 Репутация: нет Всего: нет |
Не получается.
В обработчике NM_CUSTOMDRAW делается вызов только CDDS_PREPAINT. В нем, как и в примере ничего не делаю, только возврат CDRF_NOTIFYITEMDRAW. Все, дальше дело не идет, вызов CDDS_ITEMPREPAINT никогда не проходит. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
очевидно дело в выборе режима отображения: -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Sphinx |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.7.2006 Репутация: нет Всего: нет |
Стоит флаг LVS_REPORT. Табличку я же вижу в текстовом виде.
Может еще какие-то флаги нужны. Это сообщение отредактировал(а) Sphinx - 23.6.2010, 14:52 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а если попробовать вот так: http://msdn.microsoft.com/en-us/library/ms...stomdraw_topic4
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Sphinx |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 20.7.2006 Репутация: нет Всего: нет |
Попробую разобраться... но на первый взгляд не вижу принципиальных отличий.
|
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Честно говоря, не понимаю зачем здесь CustomDraw\OwnerDraw. Разве что поучиться, ибо полезная весчь. А задачу я бы решала, как автор изначально предлагал: нужно добавить цвет - добавляем еще один элемент в ImageList, а потом в лист-вью. В чем проблема-то? Создаем совместимый битмап нужного размера, заполняем его нужным цветом (да хотя бы с помощью PatBlt), вставляем в ImageList... что еще?
-------------------- ... |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
![]() не для того он нужен: можно ведь комаров бить и сковородкой, но ведь она не для этого предназначена Добавлено через 4 минуты и 25 секунд скажу больше: для такой задачи я бы использовал listbox -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Ну, вопрос вкуса. Разрабатывать ImageList для такого случая точно бы не стоило, но он уже есть, так что пусть работает... Да и у автора уже реализация была на его основе, совсем чуть-чуть изменить.
Чем меньше мне по кнопкам тыкать тем лучше - в самом общем случае ... ![]() -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
нет, я непротив, можно оставить все как есть,
обычно это был бы правильный выбор: как спланировал - так и сделал, работодатель это оценит (если узнает ![]() прсто вопрос был как раз о гибкости и что лучше -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |