Как настроить ширину столбцов CListCtrl, чтобы соответствовать самой длинной строке в каждом столбце?

Я стараюсь:

void MyListCtrl::UpdateWidthOfColumns( void )
{

int NofColumns = GetItemCount();
for (int i = 0; i < NofColumns - 1 ; ++i)
{
SetColumnWidth( i, LVSCW_AUTOSIZE_USEHEADER );
}
}

результат: ширина каждого столбца регулируется размером строки заголовка, а не самой большой строкой.
Что я делаю не так?

0

Решение

Вы делаете это:

SetColumnWidth( i, LVSCW_AUTOSIZE_USEHEADER );

В соответствии с MSDN

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

Вам нужно пройти через каждый столбец, найти самую длинную строку:

CSize   sz;

for (/*for each column, go through each row*/)
{
sz = pDC->GetTextExtent(str); // get string size for each row
if (sz.cx > dx)
dx = sz.cx;
}

затем

// Установить ширину столбца на наибольшую строку.

SetColumnWidth(dx);
2

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

Других решений пока нет …