c – CListCtrl尽管有足够的空间显示省略号(仅限Win2008和Win7)
发布时间:2020-12-16 06:58:44 所属栏目:百科 来源:网络整理
导读:我正在使用CListCtrl在ListView模式下显示一些带图标的项目.大多数情况下,列表中只有一个项目,右侧有足够的空间,但在我的Win2008系统(或Win7)上,它使用省略号截断文本(例如“Tank”被截断为“Ta …”) .所有数据都不会发生这种情况(即使是一些较长的字符串也
我正在使用CListCtrl在ListView模式下显示一些带图标的项目.大多数情况下,列表中只有一个项目,右侧有足够的空间,但在我的Win2008系统(或Win7)上,它使用省略号截断文本(例如“Tank”被截断为“Ta …”) .所有数据都不会发生这种情况(即使是一些较长的字符串也可以),但是反复使用“Tank”示例.同样在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); 也没有做到这一点. 有任何想法吗? 米莎 解决方法
这可能对你有帮助.插入所有列和行后调用此函数.
void SizeAllColumns(CListCtrl& list) { CHeaderCtrl* pHeader = list.GetHeaderCtrl(); ASSERT(pHeader); if (pHeader) { // Turn off redraw until the columns have all been resized list.SetRedraw(FALSE); for (int iCurrCol = 0; iCurrCol < pHeader->GetItemCount(); iCurrCol++) { list.SetColumnWidth(iCurrCol,LVSCW_AUTOSIZE); int nCurrWidth = list.GetColumnWidth(iCurrCol); list.SetColumnWidth(iCurrCol,LVSCW_AUTOSIZE_USEHEADER); int nColHdrWidth = list.GetColumnWidth(iCurrCol); list.SetColumnWidth(iCurrCol,max(nCurrWidth,nColHdrWidth)); } // Now that sizing is finished,turn redraw back on and // invalidate so that the control is repainted list.SetRedraw(TRUE); list.Invalidate(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |