MFC list control控件添加图标

MFC listcontral控件 创建和添加数据

MFC list控件 从文件中添加保存数据项

MFC list control控件数据修改
图片素材
案例链接(图像也再里面)
在这里插入图片描述
添加位图资源,图片已经根据英雄的顺序排好了,添加后的的ID也就和英雄在文件中的排列顺序是一样的。
在这里插入图片描述
在这里插入图片描述
给HeroInfo结构体添加新的成员用来保存对应的资源位图ID

typedef struct _HeroInfo
{
	wchar_t name[5];
	wchar_t Game_Profession[3];
	int Price_God;
	int Price_Tickets;
	int BitmapID;
}HeroInfo;

把程序之前生成的heroinfo.dat文件删除,现在要重新生成一个文件来保存新的数据。

wchar_t *name[30]=
	{L"甄姬",L"庄周",L"刘禅",L"孙尚香",L"钟无艳",L"孙膑",L"小乔",L"扁鹊"
	,L"后羿",L"姜子牙",L"廉颇",L"王昭君",L"墨子",L"狄仁杰",
	L"老夫子",L"鲁班七号",L"杨玉环",L"李信",L"米莱狄",L"瑶",L"女娲",L"云中君",
	L"伽罗",L"牛魔",L"孙策",L"盾山",L"李元",L"虞姬",L"刘备",L"张飞"};
wchar_t* pro[30] = { L"法师",L"辅助",L"辅助",L"射手",L"战士",L"辅助",L"法师",L"法师"
	,L"射手",L"法师",L"战士",L"法师",L"法师",L"射手"
	,L"战士",L"射手",L"法师",L"战士",L"法师",L"辅助",L"法师",L"刺客"
	,L"射手",L"辅助",L"战士",L"辅助",L"射手",L"射手",L"刺客",L"辅助" };
int price_g[30]{ 2888,2888,2888,5888,5888,5888,5888,5888,
						6888,6888,8888,8888,8888,8888,
						13888,13888,13888,13888,13888,13888,13888,13888,
						13888,13888,13888 ,13888,13888,13888,13888,13888 };
int price_t[30]{ 588,588, 588, 588, 588, 288, 588, 588, 588, 388, 588,
	588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
	588, 588, 588, 588, 588 };
int ID[30] = { IDB_BITMAP1,IDB_BITMAP2, IDB_BITMAP3, IDB_BITMAP4, IDB_BITMAP5, IDB_BITMAP6,
	IDB_BITMAP7, IDB_BITMAP8, IDB_BITMAP9, IDB_BITMAP10, IDB_BITMAP11, IDB_BITMAP12 ,IDB_BITMAP13,
	IDB_BITMAP14, IDB_BITMAP15, IDB_BITMAP16, IDB_BITMAP17, IDB_BITMAP18, IDB_BITMAP19, IDB_BITMAP20,
	IDB_BITMAP21 ,IDB_BITMAP22, IDB_BITMAP23, IDB_BITMAP24, IDB_BITMAP25, IDB_BITMAP26, IDB_BITMAP27,
	IDB_BITMAP28, IDB_BITMAP29, IDB_BITMAP30 };

for (int i = 0; i <=29; i++)
{
	HeroInfo h = { 0 };
	wcscpy(h.name, name[i]);
	wcscpy(h.Game_Profession, pro[i]);
	h.Price_God = price_g[i];
	h.Price_Tickets = price_t[i];
	h.BitmapID = ID[i];
	count++;
	heroVector.push_back(h);
}

heroinfo.dat中的数据应该通过代码去添加而不是打开记事本手动添加,这段代码放在OnInitDialog()方法里,添加好数据后注释掉就可以了。

正文开始
给Clist控件Dlg类添加图像列表对象成员:
CImageList m_imglist;

加载位图,并将位图添加到图像列表中

void Clist控件Dlg::LoadHeroInfo(LPCTSTR filename)
{
	// TODO: 在此处添加实现代码.
	CFile file;
	bool can = file.Open(filename, CFile::modeRead);
	if (false == can)
	{
		MessageBox(L"打开失败");
		return;
	}
	HeroInfo heroInfo = { 0 };
	while (file.Read(&heroInfo, sizeof(heroInfo)))
	{
		/*为了加载图片而新增三行的代码*/
		CBitmap bmp;
		bmp.LoadBitmap(heroInfo.BitmapID);//加载位图
		m_imglist.Add(&bmp, RGB(0, 0, 0));//将位图添加到图像列表
		
		count++;
		heroVector.push_back(heroInfo);
		InsertHeroInfo(heroInfo);
	}

}

初始化图形列表对象
在OnInitDlg()方法中

//创建图像列表 这里是30*30的图片  透明背景
m_imglist.Create(30, 30, ILC_COLOR32 | ILC_MASK, 40, 40);

向列表视图控件分配图像列表

m_list.SetImageList(&m_imglist, LVSIL_SMALL);
m_imglist.Create(30, 30, ILC_COLOR32 | ILC_MASK, 40, 40);
LoadHeroInfo(L".\\heroinfo.dat")
m_list.SetImageList(&m_imglist, LVSIL_SMALL);

将图片插入到列表视图控件上
插入操作有两处,一是InsertHeroInfo(HeroInfo heroInfo)会将从文件中读取的插入到列表视图控件上,另一是按下添加按钮会将新创建的HeroInfo对象添加到列表视图控件上。因此要在这两个函数中添加相应的代码

void Clist控件Dlg::InsertHeroInfo(HeroInfo heroInfo)
{
	int nCnt = m_list.GetItemCount();
	m_list.InsertItem(nCnt, heroInfo.name,nCnt);
	m_list.SetItemText(nCnt, 1, heroInfo.Game_Profession);
	CString str;
	str.Format(L"%d", heroInfo.Price_God);
	m_list.SetItemText(nCnt, 2, str);
	str.Format(L"%d", heroInfo.Price_Tickets);
	m_list.SetItemText(nCnt, 3, str);
}

之前的文章提到过InsertItem函数还有一个形式

int InsertItem( int nItem, LPCTSTR lpszItem, int nImage )
是可以插入图标的,int nImage这个参数表示的就是插入的图片在图片列表中的序号。

void Clist控件Dlg::OnBnClickedButton1()
{
	
	//TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
	HeroInfo hero = { 0 };
	wcscpy(hero.name, m_Name.GetBuffer());
	wcscpy(hero.Game_Profession, m_Profession.GetBuffer());
	hero.Price_God = m_price_gold;
	hero.Price_Tickets = m_price_tickets;
	/*先按顺序添导入了新英雄的位图资源,所以新加的资源ID就是IDB_BITMAP1 + count*/
	hero.BitmapID = IDB_BITMAP1 + count;
	heroVector.push_back(hero);
	
	CBitmap bmp;
	bmp.LoadBitmapW(hero.BitmapID);
	m_imglist.Add(&bmp, RGB(0, 0, 0));
	m_list.InsertItem(count, hero.name,count);
	
	m_list.SetItemText(count, 1, hero.Game_Profession);
	TCHAR str[10] = { 0 };
	_itow(hero.Price_God, str,10);
	m_list.SetItemText(count, 2, str);

	_itow(hero.Price_Tickets, str, 10);
	m_list.SetItemText(count, 3, str);

	count++;
	/*m_list.InsertItem(i, heroVector[i].name);*/

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值