如何实现在MFC中ListCtrl的某一列的文本超过该列宽度后能自动换行显示
15条回答 默认 最新
Minuw 2023-06-06 09:25关注这个可以试试参考
设置ListCtrl的扩展风格点击ListCtrl的属性窗口,选择"Styles"选项卡,勾选"Full Row Select"和"Gridlines"选项。
在代码中使用ListCtrl的SetExtendedStyle函数来设置扩展风格。例如,如果要让第2列中文本自动换行显示,可以参考下面代码:
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_WRAPTEXT); m_ListCtrl.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);LVS_EX_WRAPTEXT表示启用文本自动换行的功能,LVSCW_AUTOSIZE_USEHEADER表示根据列标题和文本内容自动调整列宽度。
在ListCtrl的OnCustomDraw函数中处理自动换行显示。代码参考如下:
void CMyListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { LPNMLVCUSTOMDRAW lpLVCustomDraw = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); *pResult = CDRF_DODEFAULT; switch (lpLVCustomDraw->nmcd.dwDrawStage) { case CDDS_PREPAINT: *pResult = CDRF_NOTIFYITEMDRAW; break; case CDDS_ITEMPREPAINT: *pResult = CDRF_NOTIFYSUBITEMDRAW; break; case CDDS_SUBITEM | CDDS_ITEMPREPAINT: { int nItem = lpLVCustomDraw->nmcd.dwItemSpec; int nSubItem = lpLVCustomDraw->iSubItem; CString strText = GetItemText(nItem, nSubItem); CDC* pDC = CDC::FromHandle(lpLVCustomDraw->nmcd.hdc); CRect rect(lpLVCustomDraw->nmcd.rc); rect.DeflateRect(2, 2); UINT nFormat = DT_LEFT | DT_VCENTER | DT_WORDBREAK | DT_END_ELLIPSIS; pDC->DrawText(strText, &rect, nFormat); *pResult = CDRF_SKIPDEFAULT; } break; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录