Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Как в ListCtrl сделать динамический ресайз колонок


Автор: AndreySol 22.5.2008, 05:58
Есть ListCtrl в стиле Report. Как сделать динамическое изменение ширины колонки при добавлении в эту колонку итема, у которого текст будет длинее ширины колонки ? Точнее, как изменить ширину колонки это понятно, а вот как вычислить ее относительно длины текста ?
Хотя-бы в общих чертах ?

Автор: deniska 22.5.2008, 07:21
Чтоб вычислить длину текста в пикселях:
создать контекст для рисования, выбрать в него(CDC::SetFont()) шрифт твоего CListCtrl (CListCtrl::GetFont).
получить размер текста в пикселях CDC::DrawText(..,..,DT_CALCRECT). дальше если надо к длине полученного прямоугольника добавляешь размер отступа текста от краев столбца. так можно получить нужную ширину столбца. может можно как то еще...  

Автор: Earnest 22.5.2008, 12:53
Все вышеперечисленное делает готовая функция CListCtrl::GetStringWidth 

Автор: AndreySol 10.6.2008, 23:30
Спасибо, чевой-то не подумал, что может быть такая ф-ция класса.

Автор: serg405 12.6.2008, 10:45
Мне нужно разрисовать ListCrtl в котором остоянно меняютса значения с большой скоростю. Все было бы хорошо но почемуто проскакивает фон самово контрола при каждом изминении даных и получаетса сильное мигание текста. Как устранить мигание?

Автор: Earnest 16.6.2008, 08:27
А как же: чтобы нарисовать, нужно сначала стереть. Чтобы не мерцало, путь один - через внеэкранный буфер... Была где-то темка от Dreamer про что-то похожее, поищи.

Автор: alviro 25.6.2008, 22:26
Помогите, пожалуйста! Нужно создать таблицу, к ячейкам которой должен быть доступ. То есть пользователь должен просто иметь возможность выбирать данные, кликая по ним. Использую List Control. Таблица заполняется, но только первый столбец дает возможность по нему щелкать. Думаю, что неправильно заполняю.  Есть вообще такая возможность у CListCtrl?

Автор: Earnest 26.6.2008, 09:33
Заполняешь ты, скорее всего, правильно. Но стандартный лист-контрол умеет редактировать только первую колонку. И выбирать только целую строку. Чтобы выделить всю строку, а не только первый элемент, используй расширенный стиль LVS_EX_FULLROWSELECT.
Но это все же не таблица. Чтобы превратить лист-контрол в полноценную таблицу, нужно много чего написать руками.
Посмотри на codeproject, там есть примеры таблиц как на основе лист-контрола, так и с нуля.
И впредь создавай свою тему.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)