Автоматическое изменение ширины столбца в CListCtrl - PullRequest
11 голосов
/ 09 апреля 2010

Как сделать CListCtrl для автоматического изменения ширины столбцов? Обычно, когда элемент в списке становится слишком длинным, внутренняя часть исчезает из поля зрения, и пользователь вручную должен изменить размер соответствующей колонки. Есть ли способ сделать это по коду?

Ответы [ 3 ]

12 голосов
/ 09 апреля 2010

Изменение размера столбцов автоматически легко:

for(int i = 0;i < pListCtrl->GetHeaderCtrl()->GetItemCount();++i)
    pListCtrl->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);

Это оптимизирует столбцы.

1 голос
/ 09 апреля 2010

У вас есть опция "Нет прокрутки"? По умолчанию (опция «Без прокрутки» отключена), если элемент становится слишком длинным, появится полоса прокрутки.

0 голосов
/ 09 апреля 2010

Полагаю, вы имеете в виду элемент управления списком в режиме отчета? К сожалению, нет способа автоматически изменить размер столбцов. Что вы можете сделать (что я делаю в некоторых местах), так это вычислить ширину столбцов при вводе элементов, затем обработать WM_SIZE и изменить размер столбцов. Однако это приводит к тому, что изменения, сделанные пользователем, будут потеряны, поэтому вам может потребоваться более эффективный алгоритм, например отслеживание, если пользователь внес какие-либо изменения, если он не изменил размер. Это не очень хорошо с точки зрения UX, я использую его только в некоторых случаях, когда поведение имеет смысл в контексте остальной части пользовательского интерфейса.

...