加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读