С наступающим всех! Тут вопрос такой созрел, или проблема, не знаю.. В листвью у итема рисуночек (битмап). Рисует. Красиво. Но у выделенного итема рисуночек закрашивается сеточкой Как можно это побороть? ImageList для листвью создавался так: invoke ImageList_Create, 16, 16, ILC_COLOR32 or ILC_MASK, 3, 0 invoke ImageList_Add,hImageListS,hBmpList,hBmpMask в качестве hBmpMask битмап розового цвета (255,0,255) Или может у кого пример есть, как самому отрисовать итемы и субитемы в листвью, что даже было бы предпочтительней, а то в msdn все примеры на Си, а я в нем никак не разберусь
Да, это мне тоже не понравилось. Ещё надо бы, чтобы можно было выделять все колонки, а не только первую. Пришлось делать полностью свой Custom Control.
Все колонки выделяются, если lvs_ex_fullrowselect установлен. А Custom control... Листбокс делал, листвью не пробовал.
LVS_EX_BORDERSELECT решает проблему. Выделяется синим только текст. Картинка не выделяется. Почему - непонятно. Но работает.
AsmGuru62 Сначала прицепить аттач (картинку), отправить пост, скопировать ссылку на аттач, потом вызвать правку сообщения, на том месте где нужна картинка кликнуть на тег (3-й с конца, с елочкой) и между img вставить ссылку
AsmGuru62 А как реализовано хранение информации об итемах\субитемах\рисунках и как ресайз организован горизонтальный (ширина колонок)\вертикальный (кол-во итемов)? Если это не секрет А тут мой листбокс
Вот такая структура хранит одну строку: Код (Text): typedef struct { PTCHAR m_pstrText; int m_iIconIndex; } MYLVITEM; Текст каждой колонки разделён символами табуляции: Код (Text): item->m_pstrText = Allocator.StrDup ("Text1\nText2\nText3"); Когда рисуется полностью строка - происходит парсинг до символа табуляции. Только я не использую strtok() - просто подсчитываю символы, так что получаю назад адрес начала текста и сколько там символов. Иконки хранятся в простом массиве: Код (Text): HICON arrIcons [16]; А какие проблемы с resizing-ом? Ты имеешь в виду изменение ширины колонок? Или scrolling?
О ресайзе: скорее интересно, как рисуется текст, допустим при изменении ширины колонки. Можно сделать этот листвью как набор статиков-субитемов (я свои лист делал так), и при этом сдвигать колонки, находящиеся справа от курсора, или можно сделать один большой элемент на всю ширину\высоту видимой части листа и калькулировать rect'ы и вписывать в них тексты субитемов либо рисовать иконки. Какой метод применен? Со скроллингом понятно, что это чисто математический перерасчет.
Всё рисуется моим кодом. Отдельных static-ов нет - это будет медленнее и больше проблем... Весь control - это единственный HWND. Текст рисуется через DrawText() - там есть такая фича: если текст не помещается - он пририсовывает "..." в конце. Сначала берём и считаем RECT для одной (первой) строки: Код (Text): RECT itemRect = clientRect; itemRect.top = COLUMN_HEADER_HEIGHT; itemRect.bottom = COLUMN_HEADER_HEIGHT + ITEM_HEIGHT; А потом циклим, отрисовывая каждую строку, при этом просто сдвигая itemRect на величину высоты строки (циклим пока не кончатся строки или itemRect.top не превысит clientRect.bottom): Код (Text): while (itemRect.top < clientRect.bottom) { if ( no more items ) { break; } // draw single item (all sub-items)... OffsetRect (&itemRect, 0, ITEM_HEIGHT); }