列表框显示进程图标

来源:互联网 发布:淘宝分销不好做 编辑:程序博客网 时间:2024/05/25 21:32
昨天调各种图标调了半了,改bug改到今天凌晨,总结一下昨天。
列表框中能够直接加入图标,但是不可以改变字体颜色、背景颜色等,因此我用了pudn上的一个类CReportCtrl
CReportCtrl
这个类把列表框给重绘了,功能十分强大。
下面说一下如何获取进程图标
.hCImageList ProcessImg;//这个定义一定要放到头文件中,定义成全局变量,不然不会显示.cpp/////////////////////////////////////////////////////////////////////////一些初始化工作SHFILEINFO shfileinfo;ProcessImg.Create(16,16, ILC_COLOR32, 2, 80);HIMAGELIST hImageList = NULL;/////////////////////////////////////////////////////////////////////////这个就是要放到进程遍历的循环里面//lpwzFullString为进程路径,.dll,.exe,.sys无论啥文件都可以hImageList=(HIMAGELIST)::SHGetFileInfo(lpwzFullString,0,&shfileinfo,sizeof(shfileinfo),SHGFI_ICON);//增加到CImagelListProcessImg.Add(shfileinfo.hIcon);//m_list为列表框指针,调用CReportCtrl类中函数设置关联m_list->SetImageList(&ProcessImg);//i为遍历时的id,调用CReportCtrl类中函数设置关联m_list->SetItemImage(i,0,i);///////////////////////////////////////////////////////////////////////
简单看上去没什么问题,但是有时候会来显示内核驱动一些信息,有些是已经被删除的,没有路径,提取不到图标,有些是有。
如何做到只在有路径的地方显示图标,做到一一对应。
我的方法是在资源管理器中自己画一个白色图标,设置一个是否有路径的BOOL变量,没有路径的,在CImageList加入白色图标。
有人可能会说,可以使用CreateIcon来创建,我试过这个函数,但不知道为什么,创建黑色图标加入可以,白色图标加入CImageList失败。
也试过其它几种方法,比如如果没有路径就跳过,但总是不可以,我觉得可能是这个不允许有些加入图标,有些不加。
写出来就这些东西,但是实际来解决的时候,却没有这么简单,因为你并不清楚问题出的哪,要慢慢去测试。
如果大家有更好的方法,欢迎分享出来,一起进步。
原创粉丝点击