我有一个列表视图,我添加了几列:
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;
column.cx = column.cxIdeal = (columns[i].Type == COLUMN_TYPE_STRING) ? 130 : 100;
。
这是不受尊重的; 这是listview的样子:
另外值得一提的是,如果不在清单文件中定位Windows公共控件6.0,则代码完美地工作,并且列具有正确的宽度。
编辑 :设置cxMin宽度的作品,但是我不能手动调整列的大小,使他们有更less的宽度(在运行时)。
Vista和以上版本的列自动调整大小。它的确切行为没有很好的记录。 要么删除LVCF_IDEALWIDTH,要么使用LVCF_MINWIDTH并设置cxMin成员。