列表视图列的宽度未得到遵守

时间:2011-03-01 13:22:57

标签: c++ windows winapi listview

我有一个listview,我在其中添加了几列:

LVCOLUMN column;

column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_IDEALWIDTH;
column.fmt = LVCFMT_LEFT;

for(size_t i = 0; i < columns.size(); ++i)
{
    const string columnName = Format("{0}. {1} ({2})", i + 1, columns[i].Name.empty() ? "?" : columns[i].Name, boost::to_lower_copy(columns[i].GetTypeName()));

    column.iSubItem = i;
    column.pszText = (char *)columnName.c_str();
    column.cchTextMax = columnName.length();
    column.cx = column.cxIdeal = (columns[i].Type == COLUMN_TYPE_STRING) ? 130 : 100;
    ListView_InsertColumn(mListView, i, &column);
    ++mColumnCount;
}

特别注意column.cx = column.cxIdeal = (columns[i].Type == COLUMN_TYPE_STRING) ? 130 : 100;

这不受尊重;这就是listview的样子:

enter image description here

还值得一提的是,如果不在清单文件中定位Windows Common Controls 6.0,代码就能完美运行,并且列的宽度正确。

编辑:将cxMin设置为宽度有效,但是我无法手动调整列的大小以使其宽度更小(在运行时)。

1 个答案:

答案 0 :(得分:3)

Vista and up已针对版本6的列自动调整大小。其确切行为未得到很好的记录。删除LVCF_IDEALWIDTH或使用LVCF_MINWIDTH并设置cxMin成员。