MFC中LISTCTRL控件如何实现自动改变行高,显示单元格中所有文字?
时间: 2024-03-28 21:41:48 浏览: 136
MFC中LISTCTRL控件默认情况下是无法自动改变行高的,但我们可以通过继承CListCtrl类并重写MeasureItem函数来实现自动改变行高的功能。具体实现步骤如下:
1. 创建一个继承自CListCtrl的类,例如CMyListCtrl。
2. 在CMyListCtrl类中添加如下代码:
```
void CMyListCtrl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
CClientDC dc(this);
CString str;
GetItemText(lpMeasureItemStruct->itemID, lpMeasureItemStruct->itemData, str);
CSize sz = dc.GetTextExtent(str);
lpMeasureItemStruct->itemHeight = sz.cy;
}
```
3. 在CMyListCtrl的OnInitDialog函数中添加如下代码:
```
CListCtrl::OnInitDialog();
CImageList *pImgList = GetImageList(LVSIL_SMALL);
if (pImgList)
{
IMAGEINFO imgInfo;
pImgList->GetImageInfo(0, &imgInfo);
SetImageList(ImageList_LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), 16, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION), LVSIL_SMALL);
}
SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
```
4. 在对话框的OnInitDialog函数中创建CMyListCtrl的实例并添加数据。
```
m_myListCtrl.SubclassDlgItem(IDC_LIST1, this);
m_myListCtrl.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100
阅读全文