virtual WTL::CListViewCtrl
От: Hayabusa Россия  
Дата: 16.05.14 14:40
Оценка:
Привет всем,

в общем тема такая, я использую CListViewCtrl в виртуальном режиме (LVS_OWNERDATA), а так же сам отрисовываю (CCustomDraw).

При инициализации листа я вызываю у него SetItemCountEx, устанавливая количество строк, которое соответствует моим данным в векторе.
Вопрос собственно такой: есть ли смысл передавать листу все данные по запросу LVN_GETDISPINFO, если можно все это дело отрисовать в custom draw?
Re: virtual WTL::CListViewCtrl
От: alik_wn  
Дата: 16.05.14 19:30
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>Вопрос собственно такой: есть ли смысл передавать листу все данные по запросу LVN_GETDISPINFO, если можно все это дело отрисовать в custom draw?


Давно этим занимался, но насколько помню, если вы полностью сами рисуете и текст и иконку, то LVN_GETDISPINFO вам не нужен, нужно всё делать в обработчике NM_CUSTOMDRAW, довольно геморойное дело, но в МСДН всё подробно расписано и можно скопипастить готовый код из примера
напр. отсюда
Re[2]: virtual WTL::CListViewCtrl
От: Hayabusa Россия  
Дата: 18.05.14 14:05
Оценка:
Здравствуйте, alik_wn, Вы писали:

_>Давно этим занимался, но насколько помню, если вы полностью сами рисуете и текст и иконку, то LVN_GETDISPINFO вам не нужен, нужно всё делать в обработчике NM_CUSTOMDRAW, довольно геморойное дело, но в МСДН всё подробно расписано и можно скопипастить готовый код из примера

_>напр. отсюда

Иконок нет, стиль таблицы у листа, да рисовать я то знаю как, но за примерчик спасибо
Вопрос был собсна только в 'нужности' LVN_GETDISPINFO, если этот обработчик не нужен, то отлично
Re[3]: virtual WTL::CListViewCtrl
От: Hayabusa Россия  
Дата: 19.05.14 11:36
Оценка:
В итоге, как выяснилось, даже и не получится так, что бы передавать данные в виртуальный лист с помощью LVN_GETDISPINFO, и при этом полностью самому рисовать лист, беря при этом данные с самого листа. Он не хранит даже то, что отрисовывается в текущий момент..
Т.е. лист при инициализации данными прорисовался нормально, потом ведешь мышью над итемами, и они все пропадают, потому что LVN_GETDISPINFO уже не вызывается, пока не скроллишь, а custom draw уже не может получить текст из самого листа (возвращаются пустые строки)
Re[4]: virtual WTL::CListViewCtrl
От: alik_wn  
Дата: 19.05.14 14:12
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>В итоге, как выяснилось, даже и не получится так, что бы передавать данные в виртуальный лист с помощью LVN_GETDISPINFO, и при этом полностью самому рисовать лист, беря при этом данные с самого листа. Он не хранит даже то, что отрисовывается в текущий момент..

H>Т.е. лист при инициализации данными прорисовался нормально, потом ведешь мышью над итемами, и они все пропадают, потому что LVN_GETDISPINFO уже не вызывается, пока не скроллишь, а custom draw уже не может получить текст из самого листа (возвращаются пустые строки)

В это и смысл "виртуального листа" — вы задаете только число итемов, и всё. Храните строки, свои данные, рисуете их сами.
Re[5]: virtual WTL::CListViewCtrl
От: Hayabusa Россия  
Дата: 19.05.14 14:17
Оценка:
Здравствуйте, alik_wn, Вы писали:

_>В это и смысл "виртуального листа" — вы задаете только число итемов, и всё. Храните строки, свои данные, рисуете их сами.


Ну да, эт я понял
Re[6]: virtual WTL::CListViewCtrl
От: Evgeniy Skvortsov Россия  
Дата: 22.05.14 05:55
Оценка:
Здравствуйте, Hayabusa, Вы писали:

_>>В это и смысл "виртуального листа" — вы задаете только число итемов, и всё. Храните строки, свои данные, рисуете их сами.


Выделенное — это лишнее.
Виртуальный лист — это просто свое хранилище данных, самому листвью сообщается количество элементов.
Если не предпринимать специальных действий — отрисовкой он (лист) занимается сам.
Re[7]: virtual WTL::CListViewCtrl
От: Hayabusa Россия  
Дата: 22.05.14 10:18
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Выделенное — это лишнее.

ES>Виртуальный лист — это просто свое хранилище данных, самому листвью сообщается количество элементов.
ES>Если не предпринимать специальных действий — отрисовкой он (лист) занимается сам.

Ну что значит лишнее, если изначально я сам и хотел его отрисовать

всего-то 20 строчек кода в OnSubItemPrepaint, сам лист ничего не рисует сейчас..

Re[8]: virtual WTL::CListViewCtrl
От: Evgeniy Skvortsov Россия  
Дата: 23.05.14 06:38
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>Ну что значит лишнее, если изначально я сам и хотел его отрисовать


Это значит то что виртуальный режим не требует ручной отрисовки.

Просто у тебя другой случай: и виртуальный режим и ручная сортировка.
Их можно использовать как по отдельности так и вместе. Эти два режима никак не связаны друг с другом.
Re[9]: virtual WTL::CListViewCtrl
От: Hayabusa Россия  
Дата: 23.05.14 07:58
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Просто у тебя другой случай: и виртуальный режим и ручная сортировка.

Не, сортировки у меня точно нет
Re[10]: virtual WTL::CListViewCtrl
От: Evgeniy Skvortsov Россия  
Дата: 23.05.14 12:24
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>Здравствуйте, Evgeniy Skvortsov, Вы писали:


ES>>Просто у тебя другой случай: и виртуальный режим и ручная сортировка.

H>Не, сортировки у меня точно нет

блин, ошибочка вышла. Я имел в виду отрисовка
Re[11]: virtual WTL::CListViewCtrl
От: Hayabusa Россия  
Дата: 23.05.14 14:19
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>блин, ошибочка вышла. Я имел в виду отрисовка


ок, тады да )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.