Я стараюсь:
void MyListCtrl::UpdateWidthOfColumns( void )
{
int NofColumns = GetItemCount();
for (int i = 0; i < NofColumns - 1 ; ++i)
{
SetColumnWidth( i, LVSCW_AUTOSIZE_USEHEADER );
}
}
результат: ширина каждого столбца регулируется размером строки заголовка, а не самой большой строкой.
Что я делаю не так?
Вы делаете это:
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);
Других решений пока нет …