尽管有足够的空间,CListCtrl仍显示省略号(仅Win2008和Win7)

Mic*_*cha 5 c++ user-interface winapi mfc clistctrl

我正在使用CListCtrl在ListView模式下显示带有图标的某些项目。多数情况下,列表中只有一项,右边有足够的空间,但是在我的Win2008系统(或Win7)上,它使用省略号将文本截断(例如,“ Tank”被截断为“ Ta ...”) 。并非所有数据都会发生这种情况(即使某些较长的字符串也可以工作),但是在“ Tank”示例中反复发生这种情况。同样在WinXP系统上,它也可以正常工作。

列表视图是通过rc文件创建的,其中包含

CONTROL  "List2",IDC_LIST,"SysListView32",LVS_LIST | WS_BORDER | WS_TABSTOP,320,27,195,38
Run Code Online (Sandbox Code Playgroud)

然后被实例化

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);
Run Code Online (Sandbox Code Playgroud)

我只插入以下格式的1列:

LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.iSubItem = 0;
myListCtrl.InsertColumn(0,&lvc);
Run Code Online (Sandbox Code Playgroud)

并插入数据

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);
Run Code Online (Sandbox Code Playgroud)

我试过了

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE_USEHEADER); 
Run Code Online (Sandbox Code Playgroud)

以及

myListCtrl.SetColumnWidth(column, LVSCW_AUTOSIZE); 
Run Code Online (Sandbox Code Playgroud)

还有一个

myListCtrl.SetExtendedStyle(LVS_EX_AUTOSIZECOLUMNS);
Run Code Online (Sandbox Code Playgroud)

也没有做到这一点。

有任何想法吗?

美茶

Bid*_*ids 1

我遇到了这个问题,我想我终于找到了答案。我的问题是对话框有一个以此样式指定的字体:

IDD_DIALOG_TurnOnOffRecords DIALOG 0, 0, 376, 263
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Turn on off records"
FONT 8, "@Arial Unicode MS"
.
.
.
Run Code Online (Sandbox Code Playgroud)

如果我删除了该FONT行和DS_SETFONT标志,CListCtrl则开始再次显示文本而不会被截断。

我的假设是它使用不同的字体来测量文本的宽度并实际进行绘图,这导致了截断。