【问题标题】:How to adjust the width of CListCtrl columns to fit the longest string in each column?如何调整 CListCtrl 列的宽度以适应每列中最长的字符串?
【发布时间】:2013-05-17 11:26:06
【问题描述】:

我正在尝试:

void MyListCtrl::UpdateWidthOfColumns( void )
{

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

结果:每列的宽度调整为它的标题字符串大小,而不是最大的字符串。
我做错了什么?

【问题讨论】:

    标签: c++ mfc clistctrl


    【解决方案1】:

    你正在这样做:

    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);
    

    【讨论】:

    • 您能提供解决方案吗?
    • @telkity 似乎在更高版本的 Windows 中,LVSCW_AUTOSIZE_USEHEADER 同时检查标题和最长字符串。你能确认一下吗?
    • @Dan,好像是这样。
    【解决方案2】:

    也可以使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 2016-05-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2011-05-27
      相关资源
      最近更新 更多