MFC list control控件添加图标

编程入门 行业动态 更新时间:2024-10-08 20:30:54

MFC list control<a href=https://www.elefans.com/category/jswz/34/1769529.html style=控件添加图标"/>

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);*/}

更多推荐

MFC list control控件添加图标

本文发布于:2024-02-06 15:18:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749939.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:控件   图标   MFC   list   control

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!