我在尝试:
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);
也可以使用 Windows 热键 Ctrl Shift Plus
m_listLicences.SendMessage(WM_KEYDOWN, VK_CONTROL, 1);
m_listLicences.SendMessage(WM_KEYDOWN, VK_SHIFT, 1);
m_listLicences.SendMessage(WM_KEYDOWN, VK_ADD, 1);
m_listLicences.SendMessage(WM_KEYUP, VK_ADD, 1);
m_listLicences.SendMessage(WM_KEYUP, VK_SHIFT, 1);
m_listLicences.SendMessage(WM_KEYUP, VK_CONTROL, 1);