我正在使用 CListCtrl 在 ListView 模式下显示一些带有图标的项目。大多数情况下,列表中只有一项右侧有足够的空间,但在我的 Win2008 系统(或 Win7)上,它使用省略号截断文本(例如,“坦克”被截断为“Ta...”) . 并非所有数据都会发生这种情况(即使是一些更长的字符串也可以),但在“坦克”示例中会反复发生。在 WinXP 系统上它也可以正常工作 - 总是。
列表视图是通过 rc 文件创建的
CONTROL "List2",IDC_LIST,"SysListView32",LVS_LIST | WS_BORDER | WS_TABSTOP,320,27,195,38
然后它被实例化
myListCtrl.SubclassDlgItem( IDC_LIST, this );
myListCtrl.ModifyStyle(LVS_OWNERDRAWFIXED, LVS_SHAREIMAGELISTS | LVS_SINGLESEL | LVS_SHOWSELALWAYS);
ListView_SetBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG));
ListView_SetTextBkColor(myListCtrl.m_hWnd,PMAINFRM->GetColor(IDCOLOR_LI_BKG));
myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_NORMAL);
myListCtrl.SetImageList(PMAINFRM->GetImageList(IDICO_16),LVSIL_SMALL);
我只插入 1 列,格式如下:
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.iSubItem = 0;
myListCtrl.InsertColumn(0,&lvc);
并插入数据
int index = 0;
int nItem = m_lstClass.InsertItem(index,(LPTSTR) strLabel, iIconID));
myListCtrl.SetItemData( nItem, (DWORD)index);
myListCtrl.SetItemState( nItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
我试过了
myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE_USEHEADER);
也
myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE);
还有一个
myListCtrl.SetExtendedStyle(LVS_EX_AUTOSIZECOLUMNS);
也没有成功。
有任何想法吗?
米查