MFC 在ListCtrl控件中插入 不同图标(第一列)

CImageList* m_imagelist; //图像列表对象
	m_imagelist = new CImageList();
    m_imagelist->Create(20,20,ILC_COLOR32,0,40);
	
	CBitmap bm2;
	CBitmap bm3;
	bm2.LoadBitmap(IDB_GRE);
	bm3.LoadBitmap(IDB_RED);
	HBITMAP hBitmap;

	if (m_imagelist->Add(&bm2, RGB(0, 0, 0))== -1||m_imagelist->Add(&bm3, RGB(0, 0, 0))== -1)
	{
		CString strMsg;
		strMsg.Format("加入BMP失败!%d", GetLastError());
		AfxMessageBox(strMsg);
	}


	int n = m_imagelist->GetImageCount();
	if (m_imagelist->GetImageCount() == 0)
	{
		CString strMsg;
		strMsg.Format("加入BMP失败!%d", GetLastError());
		AfxMessageBox(strMsg);
	}
	
	m_DevList.SetImageList(m_imagelist,LVSIL_SMALL );
               
    		  LV_ITEM lvitem;
		  TCHAR szBuf[10];
		  lvitem.iItem = nItemNo;
		  lvitem.iSubItem = 0;
		  lvitem.mask = LVIF_TEXT;
		  lvitem.pszText = szBuf;
		  lvitem.cchTextMax = 10;  
		  
		  m_DevList.GetItem(&lvitem);
		  LV_ITEM lvitem2;
 		  memset ((char *) &lvitem2, '\0', sizeof (LV_ITEM));
 		  lvitem2.mask = LVIF_TEXT | LVIF_IMAGE  | LVIF_STATE;
 		  lvitem2.iItem = lvitem.iItem;
		  lvitem2.iSubItem = lvitem.iSubItem ;
 		  lvitem2.stateMask =lvitem.stateMask;
		  lvitem2.iImage = 1;          //显示不同的图标时,可以把一个int 变量赋给这个属性值
		  lvitem2.pszText =  lvitem.pszText;
	//	  m_DevList.InsertItem (&lvitem);
		  m_DevList.SetItem(&lvitem2);


参考了网上的一些文章,记录下来防止以后忘记

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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。然后在第一行第二显示了第二个图标。你可以根据需要修改行号、号和图标索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值