【问题标题】:Width of listview columns not respected不遵守列表视图列的宽度
【发布时间】:2011-03-01 21:41:42
【问题描述】:

我有一个列表视图,我在其中添加了几列:

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;

这不被尊重;这是列表视图的样子:

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

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

【问题讨论】:

    标签: c++ windows winapi listview


    【解决方案1】:

    Vista 及更高版本具有自动调整第 6 版的列大小。它的确切行为没有得到很好的记录。要么删除 LVCF_IDEALWIDTH,要么使用 LVCF_MINWIDTH 并设置 cxMin 成员。

    【讨论】:

    • 我最初只有LVCF_WIDTH 用于宽度相关的字段。我添加了所有其他字段只是为了让它工作,但只有LVCF_WIDTH 它没有。可能与listview处于虚拟模式(LVS_OWNERDATA)有关吗?
    • 不太可能,奇怪的问题。如果您完全使用 LVM_SETEXTENDEDLISTVIEWSTYLE (ListView_SetExtendedListViewStyle),请记录您传递的内容。
    • 我在那里有LVS_EX_AUTOSIZECOLUMNS。我添加它是因为它看起来是个好主意,但后来完全忘记了它。现在删除它,我的宽度得到尊重,非常感谢=)
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2022-10-18
    • 1970-01-01
    相关资源
    最近更新 更多