c++ - ListView 列的宽度不受尊重

标签 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

还值得一提的是,如果 list 文件中没有针对 Windows Common Controls 6.0,代码可以完美运行,并且列的宽度正确。

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

最佳答案

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

关于c++ - ListView 列的宽度不受尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5155069/

相关文章:

c++ - 为什么 WinAPI 的 GetSystemInfo 告诉我我的四核机器有 8 个内核?

c++ - 从 std::exception 继承的正确方法

c++ - 在 C++ 中,如何使用来自单独源文件的单例?

支持部分序列化的C++序列化库?

c++ - 为什么std::string的成员运算符=左值引用不合格

c++ - Windows API : could WM_DESTROY be sent without WM_CLOSE beforehand?

winapi - 按 Esc 键关闭 TaskDialog

c++ - 如何在 Windows 上拦截 C++ 中的段错误?

windows - 将 PowerShell 转换为 Bash

winapi - 谁在 SetClipboardData(CF_BITMAP, HBITMAP) 中释放句柄?