怎样更换(动态更换)列表控制的图标 提示有分哦 ListCtrl的图标由CImageList的一个对象来管理。要更改它的图标,相应的改变CImageList,并SetImageList就行了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可是我是在insertitem之后要改变它呀是不是非得删除 再insert呀我想不删除就更改它不知怎么做好像有什么SetItemData(......的不过我不会用 CListCtrl& ListCtrl = GetListCtrl();m_LargeImageList.Create(IDB_LARGE_COMPUTERS, 32, 1, RGB(255, 255, 255));ListCtrl.SetImageList(&m_LargeImageList, LVSIL_NORMAL);LV_ITEM lvi;......ListCtrl.InsertItem(&lvi);然后动态更换图标动态更换lvi.iImage为m_LargeImageList中某一图标号......ListCtrl.SetItemState(nItem,&lvi); CImageList* pListImage = new CImageList; pListImage->Create(32, 32, ILC_COLOR8 ¦ ILC_MASK, 2, 0); pListImage->Add(AfxGetApp()->LoadIcon(IDI_IMAGE)); m_list.SetImageList(pListImage, LVSIL_SMALL); m_list.InsertItem(1,"two", 0)原来我是这样做的老是改不回来帮我改改好吗 LV_ITEM lv; lv.mask = LVIF_IMAGE|LVIF_TEXT; lv.iImage = 0; lv.iItem=count; char ichar[10]; CString str="vjeymyf"; strcpy(ichar,strIP); lv.pszText=ip; m_list.InsertItem(&lv);可是什么都没有出来 lv.pszText=ichar;可是改后也不行 上面的LV_ITEM的一些属性可能你没设置,所以出不来,其实用m_list.InsertItem(1,"two", 0)是一样可以达到目的的。动态更换图标:SetItemState 要全都设置吗你是说我在插入时用m_list.InsertItem(1"two",0);在修改时选设置那个结构再setitemstate是吗可是关建是那个结构怎么设置 LV_ITEM lv; lv.mask = LVIF_IMAGE|LVIF_TEXT; lv.iImage = 0; lv.iSubItem =0; lv.iItem=0; lv.cchTextMax=10; char ichar[10]; strcpy(ichar,strIP); lv.pszText=ichar; m_list.InsertItem(&lv); 这样之后 出来了可以插入可是用LV_ITEM lv;lv.mask = LVIF_IMAGE;lv.iImage = 1;lv.iSubItem =0;lv.iItem=0;m_list.SetItemState(0,&lv);//SetItemData(0,1);就达不到郊果(那只能设置它的状态)SetItemState( 本来就是不能动态必图标的不知道怎么办 设置状态后你用m_list.Update()看一下行不行 你的图标是第一列还是第二列,如果不是第一列,要添加LVS_EX_SUBITEMIMAGES如果动态修改列的图表,LV_ITEM lvitem; lvitem.mask=LVIF_IMAGE|LVIF_TEXT;lvitem.iItem=nItem;lvitem.iSubItem=nSubItem;lvitem.iImage=nNewImage;//lvitem.pszText=(LPTSTR)(LPCTSTR)strID;pListCtrl.SetItem(&lvitem); 其实设置状态是成功的 就是用我上面的代吗 当执行代码时 第一个item变成选中状态 以后怎么都不有心变它了可是我想要的是更改它的图标加上m_list.Update()之后是一样的 to:shizf()我是用small icon不是报表 没有第一列 第二列这分吧按你的做法LV_ITEM lv;lv.mask = LVIF_IMAGE|LVIF_TEXT;lv.iImage = 1;//改为的图标lv.iSubItem =0;lv.iItem=0;m_list.SetItem(&lv);//SetItemState(0,&lv);//SetItemData(0,1);这样也不行我加m_list.UpData(..也不行 按我上面的代码,在要更改的时候调用,LV_ITEM lvitem; //选定要更改的项,设置mask,lvitem.mask=LVIF_IMAGE¦LVIF_TEXT;lvitem.iItem=nItem;lvitem.iSubItem=nSubItem;//新的图标lvitem.iImage=nNewImage;//更改pListCtrl.SetItem(&lvitem); //这样应该可以更改的你是否在开始调用了pListCtrl->SetRedraw(FALSE);如果是,最后应该调用pListCtrl->SetRedraw(TRUE); agree,如果SetItem行的话,最后Update应该也可以呀。 应该这样:在ImageList中可以加入多个图标,方法如下:HICON hIcon[2];int num; m_imageList.Create(16,16,0,8,8); hIcon[0]=AfxGetApp()->LoadIcon(IDI_ICON0);hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON1);for(num=0;num<2;num++){m_imageList.Add(hIcon[num]);}然后插入行时由lvitem.iImage=nImage;(从1开始记数,按加入imagelist的顺序)pListCtrl->InsertItem(&lvitem);如果要修改,用lvitem.iImage=nImage;setItem(&lvitem);当然要让iImage的修改起作用,必须lvitem.mask=LVIF_IMAGE|.... 要lvitem.mask=LVIF_IMAGE;就可以了谢谢大家 我也搞定给分喽 请教一个LNK2001: unresolved external symbol "int __cdecl Run(void)"的错误! 提问一个简单的二级指针问题。 线程的一个小问题 如何保存和读取格式化文本 关于动态连接库与主程序数据传递问题 请问一个关于图像文件图标索引的问题,请您指点,谢谢您! 程序运行时所用的内存空间的问题! 祝贺以下用户当选2002年度微软亚洲“最有价值专家”! 怎么令ListCtrl控件变的可写入? 如何用已有的菜单资源来作弹出式菜单 深入浅出MFC第九章! 可否在SDI程序的View中使用SplitterWnd? 如何正确的创建密码对话框?
是不是非得删除 再insert呀
我想不删除就更改它
不知怎么做
好像有什么
SetItemData(......的不过我不会用
m_LargeImageList.Create(IDB_LARGE_COMPUTERS, 32, 1, RGB(255, 255, 255));
ListCtrl.SetImageList(&m_LargeImageList, LVSIL_NORMAL);LV_ITEM lvi;
......
ListCtrl.InsertItem(&lvi);然后动态更换图标
动态更换lvi.iImage为m_LargeImageList中某一图标号
......
ListCtrl.SetItemState(nItem,&lvi);
CImageList* pListImage = new CImageList;
pListImage->Create(32, 32, ILC_COLOR8 ¦ ILC_MASK, 2, 0);
pListImage->Add(AfxGetApp()->LoadIcon(IDI_IMAGE));
m_list.SetImageList(pListImage, LVSIL_SMALL);
m_list.InsertItem(1,"two", 0)
原来我是这样做的
老是改不回来
帮我改改好吗
lv.mask = LVIF_IMAGE|LVIF_TEXT;
lv.iImage = 0;
lv.iItem=count;
char ichar[10];
CString str="vjeymyf";
strcpy(ichar,strIP);
lv.pszText=ip;
m_list.InsertItem(&lv);可是什么都没有出来
可是改后也不行
动态更换图标:SetItemState
在修改时
选设置那个结构
再setitemstate是吗
可是关建是那个结构怎么设置
lv.mask = LVIF_IMAGE|LVIF_TEXT;
lv.iImage = 0;
lv.iSubItem =0;
lv.iItem=0;
lv.cchTextMax=10;
char ichar[10];
strcpy(ichar,strIP); lv.pszText=ichar;
m_list.InsertItem(&lv);
这样之后 出来了
可以插入
可是用
LV_ITEM lv;
lv.mask = LVIF_IMAGE;
lv.iImage = 1;
lv.iSubItem =0;
lv.iItem=0;
m_list.SetItemState(0,&lv);//SetItemData(0,1);
就达不到郊果(那只能设置它的状态)
SetItemState( 本来就是不能动态必图标的
不知道怎么办
你用m_list.Update()看一下行不行
如果动态修改列的图表,
LV_ITEM lvitem;
lvitem.mask=LVIF_IMAGE|LVIF_TEXT;
lvitem.iItem=nItem;
lvitem.iSubItem=nSubItem;
lvitem.iImage=nNewImage;
//lvitem.pszText=(LPTSTR)(LPCTSTR)strID;
pListCtrl.SetItem(&lvitem);
加上m_list.Update()之后是一样的
to:shizf()我是用small icon不是报表 没有第一列 第二列这分吧
按你的做法LV_ITEM lv;
lv.mask = LVIF_IMAGE|LVIF_TEXT;
lv.iImage = 1;//改为的图标
lv.iSubItem =0;
lv.iItem=0;
m_list.SetItem(&lv);//SetItemState(0,&lv);//SetItemData(0,1);
这样也不行
我加m_list.UpData(..也不行
LV_ITEM lvitem;
//选定要更改的项,设置mask,
lvitem.mask=LVIF_IMAGE¦LVIF_TEXT;
lvitem.iItem=nItem;
lvitem.iSubItem=nSubItem;//新的图标
lvitem.iImage=nNewImage;
//更改
pListCtrl.SetItem(&lvitem);
//这样应该可以更改的你是否在开始调用了pListCtrl->SetRedraw(FALSE);
如果是,最后应该调用pListCtrl->SetRedraw(TRUE);
HICON hIcon[2];
int num;
m_imageList.Create(16,16,0,8,8);
hIcon[0]=AfxGetApp()->LoadIcon(IDI_ICON0);
hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON1);
for(num=0;num<2;num++)
{
m_imageList.Add(hIcon[num]);
}
然后插入行时由lvitem.iImage=nImage;(从1开始记数,按加入imagelist的顺序)
pListCtrl->InsertItem(&lvitem);
如果要修改,用
lvitem.iImage=nImage;
setItem(&lvitem);当然要让iImage的修改起作用,必须
lvitem.mask=LVIF_IMAGE|....
就可以了
谢谢大家
我也搞定
给分喽