Виртуальный CListCtrl Авто Размер

Я хочу изменить размер столбцов виртуального ClistCtrl (флаг LVS_OWNERDATA) автоматически.

На некоторых форумах я обнаружил, что виртуальные списки не могут использовать опцию «LVSCW_AUTOSIZE». Некоторые предлагают вместо этого реализовать алгоритм.

Но после загрузки моего ClistCtrl без какой-либо опции изменения размера, двойной щелчок по разделителю заголовка корректно изменяет размеры видимых столбцов.

Итак, как я могу выполнить функцию, которая вызывается «HDN_DIVIDERDBLCLICKW»?

1

Решение

Автоматическое изменение размеров, предложенное Clements, работает для обычных элементов управления списком, но не для виртуальных (потому что элемент управления ничего не знает о данных столбца). Вы должны указать ширину столбца данных самостоятельно.

1

Другие решения

От эта статья Codeproject, Вы должны иметь возможность автоматически изменять размер столбца с помощью чего-то вроде:

pListCtrl->SetColumnWidth(i, LVSCW_AUTOSIZE);
int nColumnWidth = pListCtrl->GetColumnWidth(i);
pListCtrl->SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
int nHeaderWidth = pListCtrl->GetColumnWidth(i);
pListCtrl->SetColumnWidth(i, max(nColumnWidth, nHeaderWidth));

Вам может понадобиться справиться уведомление LVN_GETDISPINFO предоставить необходимые данные для управления виртуальным списком, хотя …

-1