宽度不尊重

问题描述:

我有一个列表视图,我加几列:特别column.cx = column.cxIdeal = (columns[i].Type == COLUMN_TYPE_STRING) ? 130 : 100;宽度不尊重

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

通知。

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

enter image description here

另外值得一提的是,没有针对Windows公共控件清单文件6.0代码工作完美,列有正确的宽度。

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

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

+0

我最初只有'LVCF_WIDTH'宽度相关的字段..我添加了所有其他人只是为了使其工作,但只有'LVCF_WIDTH'它没有。可能它与列表视图处于虚拟模式(LVS_OWNERDATA)的事实有关? –

+0

不太可能,奇怪的问题。如果您完全使用LVM_SETEXTENDEDLISTVIEWSTYLE(ListView_SetExtendedListViewStyle),则记录您传递的内容。 –

+0

我在里面有'LVS_EX_AUTOSIZECOLUMNS' ..我加了它,因为它看起来像个好主意,但后来完全忘了它。现在删除它,我的宽度受到尊重,非常感谢你=) –