MFC ListCtrl 中如何在第二列显示图标
时间: 2024-02-22 10:59:24 浏览: 138
在 MFC ListCtrl 中,可以使用 `SetItem` 函数来设置某一行的数据。为了在第二列显示图标,需要设置该列的 `iImage` 成员变量为图标的索引。具体步骤如下:
1. 创建一个包含图标的图像列表。
```cpp
CImageList m_imageList;
m_imageList.Create(16, 16, ILC_COLOR, 2, 1);
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
```
这里创建了一个 16x16 大小的图像列表,并向其中添加了两个图标。
2. 将图像列表关联到 ListCtrl。
```cpp
m_listCtrl.SetImageList(&m_imageList, LVSIL_SMALL);
```
这里将图像列表关联到 ListCtrl,并指定图像列表的类型为 `LVSIL_SMALL`。
3. 在某一行的第二列显示图标。
```cpp
LVITEM lvItem;
lvItem.mask = LVIF_IMAGE;
lvItem.iItem = 0; // 要设置的行号
lvItem.iSubItem = 1; // 要设置的列号
lvItem.iImage = 1; // 图标在图像列表中的索引
m_listCtrl.SetItem(&lvItem);
```
这里首先创建了一个 `LVITEM` 结构体,并将其 `mask` 成员变量设置为 `LVIF_IMAGE`,表示要设置该行的图标。然后将要设置的行号和列号分别设置为 `iItem` 和 `iSubItem` 成员变量。最后将图标在图像列表中的索引设置为 `iImage` 成员变量,并调用 `SetItem` 函数来设置该行的数据。
完整的示例代码如下:
```cpp
// 在 OnInitDialog 函数中添加以下代码
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 创建图像列表
m_imageList.Create(16, 16, ILC_COLOR, 2, 1);
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
// 关联图像列表到 ListCtrl
m_listCtrl.SetImageList(&m_imageList, LVSIL_SMALL);
// 在第一行第二列显示第二个图标
LVITEM lvItem;
lvItem.mask = LVIF_IMAGE;
lvItem.iItem = 0;
lvItem.iSubItem = 1;
lvItem.iImage = 1;
m_listCtrl.SetItem(&lvItem);
return TRUE;
}
```
这里在对话框的 OnInitDialog 函数中创建了一个图像列表,并将其关联到 ListCtrl。然后在第一行第二列显示了第二个图标。你可以根据需要修改行号、列号和图标索引。
阅读全文