ListView поменять цвет границ элементов
От: roshost  
Дата: 17.08.12 18:47
Оценка:
Создаю ListView контрол LVS_REPORT с расширенными стилями: LVS_EX_GRIDLINES и LVS_EX_FULLROWSELECT.
Необходимо изменить цветовую гамму.
1. Используя NM_CUSTOMDRAW успешно удается поменять фон элементов и цвет текста (CDDS_SUBITEM и CDDS_ITEMPREPAINT).
2. Также удалось модифицировать хидер через обработку сообщений WM_PAINT для хидера.
Но так и не удалось поменять цвет границ у элементов, сетка ярко выделяется и явно не вписывается, как поменять ее цвет?
listview цвет границ
Re: ListView поменять цвет границ элементов
От: Carc Россия http://www.amlpages.com/home.php
Дата: 17.08.12 19:46
Оценка:
Здравствуйте, roshost, Вы писали:

R>Создаю ListView контрол LVS_REPORT с расширенными стилями: LVS_EX_GRIDLINES и LVS_EX_FULLROWSELECT.

R>Необходимо изменить цветовую гамму.
R>1. Используя NM_CUSTOMDRAW успешно удается поменять фон элементов и цвет текста (CDDS_SUBITEM и CDDS_ITEMPREPAINT).
R>2. Также удалось модифицировать хидер через обработку сообщений WM_PAINT для хидера.
R>Но так и не удалось поменять цвет границ у элементов, сетка ярко выделяется и явно не вписывается, как поменять ее цвет?
Не оно — LVM_SETOUTLINECOLOR?
Aml Pages Home
Re[2]: ListView поменять цвет границ элементов
От: VladFein США  
Дата: 17.08.12 20:07
Оценка:
Здравствуйте, Carc, Вы писали:

C>Здравствуйте, roshost, Вы писали:


R>>Создаю ListView контрол LVS_REPORT с расширенными стилями: LVS_EX_GRIDLINES и LVS_EX_FULLROWSELECT.

R>>Необходимо изменить цветовую гамму.
R>>1. Используя NM_CUSTOMDRAW успешно удается поменять фон элементов и цвет текста (CDDS_SUBITEM и CDDS_ITEMPREPAINT).
R>>2. Также удалось модифицировать хидер через обработку сообщений WM_PAINT для хидера.
R>>Но так и не удалось поменять цвет границ у элементов, сетка ярко выделяется и явно не вписывается, как поменять ее цвет?
C>Не оно — LVM_SETOUTLINECOLOR?

LVS_EX_GRIDLINES != LVS_EX_BORDERSELECT
Re[3]: ListView поменять цвет границ элементов
От: Carc Россия http://www.amlpages.com/home.php
Дата: 17.08.12 20:13
Оценка: 3 (1)
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, Carc, Вы писали:


C>>Здравствуйте, roshost, Вы писали:


R>>>Создаю ListView контрол LVS_REPORT с расширенными стилями: LVS_EX_GRIDLINES и LVS_EX_FULLROWSELECT.

R>>>Необходимо изменить цветовую гамму.
R>>>1. Используя NM_CUSTOMDRAW успешно удается поменять фон элементов и цвет текста (CDDS_SUBITEM и CDDS_ITEMPREPAINT).
R>>>2. Также удалось модифицировать хидер через обработку сообщений WM_PAINT для хидера.
R>>>Но так и не удалось поменять цвет границ у элементов, сетка ярко выделяется и явно не вписывается, как поменять ее цвет?
C>>Не оно — LVM_SETOUTLINECOLOR?

VF>LVS_EX_GRIDLINES != LVS_EX_BORDERSELECT

Другой бы спорил... что не равно... Есть другие документированные варианты?

В принципе я делал прорисовку рамки в ListView через CustomDraw. Но у меня там несколько все прощее было: просто нарисовать рамку вокруг выделенного элемента. Так что элементарно Ватсон: CDDS_ITEMPOSTPAINT и все дела — поехали отрисовываться поверх. Но, я так понимаю, у топик-стартера задачка посложнее будет. И отрисоваться поверх, да еще желательно в стиле самой Винды, да чтоб на расходились координаты — не всё так просто.

Думаю, стоит проще делать — убирать WS_EX_GRIDLINES и рисовать рамки полностью самому. Тогда хотя бы расхождений не будет.
Aml Pages Home
Re[4]: ListView поменять цвет границ элементов
От: roshost  
Дата: 17.08.12 22:06
Оценка:
Спасибо решил вопрос отключением WS_EX_GRIDLINES.
Через WM_PAINT рисую кастомно сетку создавая свою кисть через CreatePen с нужным цветом:
1. Определяем ширину колонок в заголовке ListView и отрисовываем вертикальные линии через MoveToEx + LineTo в пределах окна.
2. Определяем высоту строки (добавляем временный элемент, получаем его RECT, сохраняем ширину, удаляем элемент — хз как иначе) и рисуем строки в пределах окна.
Если используется скролл то вносим корректировки учитывая положение скролла.
Вообщем-то все.
Спасибо за помощь.
Re[4]: ListView поменять цвет границ элементов
От: VladFein США  
Дата: 22.08.12 14:44
Оценка:
Здравствуйте, Carc, Вы писали:

VF>>LVS_EX_GRIDLINES != LVS_EX_BORDERSELECT

C>Другой бы спорил... что не равно... Есть другие документированные варианты?

Я не знаю есть ли другие варианты.
Я говорил, что и этого нет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.