现在的位置: 首页 > 综合 > 正文

列表框显示进程图标

2014年02月01日 ⁄ 综合 ⁄ 共 1174字 ⁄ 字号 评论关闭

昨天调各种图标调了半了,改bug改到今天凌晨,总结一下昨天。
列表框中能够直接加入图标,但是不可以改变字体颜色、背景颜色等,因此我用了pudn上的一个类CReportCtrl
CReportCtrl
这个类把列表框给重绘了,功能十分强大。
下面说一下如何获取进程图标

.h
CImageList 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);
//增加到CImagelList
ProcessImg.Add(shfileinfo.hIcon);
//m_list为列表框指针,调用CReportCtrl类中函数设置关联
m_list->SetImageList(&ProcessImg);
//i为遍历时的id,调用CReportCtrl类中函数设置关联
m_list->SetItemImage(i,0,i);
///////////////////////////////////////////////////////////////////////

简单看上去没什么问题,但是有时候会来显示内核驱动一些信息,有些是已经被删除的,没有路径,提取不到图标,有些是有。
如何做到只在有路径的地方显示图标,做到一一对应。
我的方法是在资源管理器中自己画一个白色图标,设置一个是否有路径的BOOL变量,没有路径的,在CImageList加入白色图标。
有人可能会说,可以使用CreateIcon来创建,我试过这个函数,但不知道为什么,创建黑色图标加入可以,白色图标加入CImageList失败。
也试过其它几种方法,比如如果没有路径就跳过,但总是不可以,我觉得可能是这个不允许有些加入图标,有些不加。
写出来就这些东西,但是实际来解决的时候,却没有这么简单,因为你并不清楚问题出的哪,要慢慢去测试。
如果大家有更好的方法,欢迎分享出来,一起进步。

【上篇】
【下篇】

抱歉!评论已关闭.