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

c – CListCtrl尽管有足够的空间显示省略号(仅限Win2008和Win7),第1张

概述我正在使用CListCtrl在ListView模式下显示一些带图标的项目.大多数情况下,列表中只有一个项目,右侧有足够的空间,但在我的Win2008系统(或Win7)上,它使用省略号截断文本(例如“Tank”被截断为“Ta …”) .所有数据都不会发生这种情况(即使是一些较长的字符串也可以),但是反复使用“Tank”示例.同样在WinXP系统上,它可以正常工作. 列表视图是通过rc文件创建的 CO 我正在使用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();  }}
总结

以上是内存溢出为你收集整理的c – CListCtrl尽管有足够的空间显示省略号(仅限Win2008和Win7)全部内容,希望文章能够帮你解决c – CListCtrl尽管有足够的空间显示省略号(仅限Win2008和Win7)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存