Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как реализовать "авторазмер" столбцов в CListCtrl? 
:(
    Опции темы
JohnWind
  Дата 22.1.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 22.1.2008
Где: Львов, Украина

Репутация: нет
Всего: нет



Собственно сабж..
Использую Visual C++ 2005, CListCtrl в режиме рэпорт. виртуальных списков не использую..

 как определить какие столбцы можно сужить или растянуть и как определить ли их надо растягивать ? 
это надо проверять когда заполняю таблицу данными?
PM MAIL WWW ICQ Skype Jabber   Вверх
Earnest
Дата 23.1.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата

This method changes the width of a column in report view or list view.

BOOL SetColumnWidth( 
int nCol, 
int cx ); 
Parameters
nCol 
Specifies the index of the column whose width is to be set. In list view, this parameter must be –1. 
cx 
Specifies the new width of the column. Can be either LVSCW_AUTOSIZE, LVSCW_AUTOSIZE_USEHEADER

Вызывать нужно после заполнения, если хочешь, чтобы учитывались данные, а не только хедер. И, естественно, это не означает, что ширина столбца будет меняться "сама" при изменении данных - функция одноразовая - вычислить размер столбца согласно текущим данным.
Цитата(JohnWind @  22.1.2008,  18:40 Найти цитируемый пост)
 как определить какие столбцы можно сужить или растянуть и как определить ли их надо растягивать ? 

Это вообще шикарный вопрос smile Кто же это кроме тебя знает - какие столбцы тебе надо растягивать...


--------------------
...
PM   Вверх
jonie
Дата 23.1.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата(Earnest @  23.1.2008,  20:13 Найти цитируемый пост)
Цитата(JohnWind @  22.1.2008,  18:40 ) как определить какие столбцы можно сужить или растянуть и как определить ли их надо растягивать ?

Это вообще шикарный вопрос  Кто же это кроме тебя знает - какие столбцы тебе надо растягивать...

он имеет в виду саму возможность: как определить необходимую ширину для текста конкретной строки в конкретной колонке. И прогнав от 0 до size-1 по строкам узнать максимальную ширину, а далее вызвать вышеупомянутый метод, для подгонки размера столбца....

в мфц я не силен.

еще гадаю по портам и md5 хешу имени...)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Earnest
Дата 24.1.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(jonie @  23.1.2008,  23:02 Найти цитируемый пост)
он имеет в виду саму возможность: как определить необходимую ширину для текста конкретной строки в конкретной колонке. И прогнав от 0 до size-1 по строкам узнать максимальную ширину, а далее вызвать вышеупомянутый метод, для подгонки размера столбца....

Телепат smile 
Тогда так: чтобы вычислить необходимый размер колонки, нужно взять контекст (CDC), установить туда фонт, полученный от лист-контрола, и прогнать через него все строки, содержащиеся в колонке. Или есть более удобная функция CListCtrl::GetStringWidth, которая делает это же самое, но избавляет нас от необходимости копаться в CDC. В цикле находишь максимальную ширину строки, сравниваешь ее с текущей и определяешь, что нужно сделать.
Тут все зависит от задачи. Например, мы хотим, чтобы все таблица (без горизонтального скрола) помещалась в окно, и все его занимала, и при этом разумно распределялись ширины колонок (т.е. пропорционально данным). Один из вариантов: после заполнения таблицы делаем всем колонкам автосайз по данным, затем определяем их суммарную ширину, затем вычитаем ее из физической ширины окна (клиентской части) и пропорционально распределяем по колонкам. Вычисляя доступную ширину, нужно учитывать наличие вертикального скролла.
Ну и т.д.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.