| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Как реализовать "авторазмер" столбцов в CListCtrl? |
| Автор: JohnWind 22.1.2008, 17:40 |
| Собственно сабж.. Использую Visual C++ 2005, CListCtrl в режиме рэпорт. виртуальных списков не использую.. как определить какие столбцы можно сужить или растянуть и как определить ли их надо растягивать ? это надо проверять когда заполняю таблицу данными? |
| Автор: jonie 23.1.2008, 22:02 | ||
он имеет в виду саму возможность: как определить необходимую ширину для текста конкретной строки в конкретной колонке. И прогнав от 0 до size-1 по строкам узнать максимальную ширину, а далее вызвать вышеупомянутый метод, для подгонки размера столбца.... в мфц я не силен. еще гадаю по портам и md5 хешу имени...) |
| Автор: Earnest 24.1.2008, 12:39 | ||
Телепат Тогда так: чтобы вычислить необходимый размер колонки, нужно взять контекст (CDC), установить туда фонт, полученный от лист-контрола, и прогнать через него все строки, содержащиеся в колонке. Или есть более удобная функция CListCtrl::GetStringWidth, которая делает это же самое, но избавляет нас от необходимости копаться в CDC. В цикле находишь максимальную ширину строки, сравниваешь ее с текущей и определяешь, что нужно сделать. Тут все зависит от задачи. Например, мы хотим, чтобы все таблица (без горизонтального скрола) помещалась в окно, и все его занимала, и при этом разумно распределялись ширины колонок (т.е. пропорционально данным). Один из вариантов: после заполнения таблицы делаем всем колонкам автосайз по данным, затем определяем их суммарную ширину, затем вычитаем ее из физической ширины окна (клиентской части) и пропорционально распределяем по колонкам. Вычисляя доступную ширину, нужно учитывать наличие вертикального скролла. Ну и т.д. |