CTreeCtrl显示系统文件图标
来源:互联网 发布:机器人动力学知乎 编辑:程序博客网 时间:2024/04/30 03:08
最近写了一个获取系统文件图标的类CFileIcon,可以用在树控件中显示任意文件图标。
类里面只有两个静态函数:
CImageList* CFileIcon::GetSysImgList()
{//获取系统图标列表
SHFILEINFO shFinfo;
HIMAGELIST hImgList=NULL;
hImgList = (HIMAGELIST)SHGetFileInfo("C://",
0,
&shFinfo,
sizeof(shFinfo),
SHGFI_SYSICONINDEX |
SHGFI_SMALLICON );
if(!hImgList)
{
AfxMessageBox("无法获取系统图标列表!");
return NULL;
}
return CImageList::FromHandle(hImgList);
}
int CFileIcon::GetSysIcon(const CString &fileName)
{//获取文件图标函数
CString str=fileName;
int iIcon = 0;
bool bFileCreated = false;
//没提供全名时创建一个文件
if(-1 == str.FindOneOf("//"))
{
str.Format("c://aa%s",CFileTool::GetExtName((const char*)fileName).c_str());
CFileTool::NewFile(str);
bFileCreated= true;
}
//获取文件信息
SHFILEINFO shFi;
if(!SHGetFileInfo(str,0,&shFi,sizeof(shFi),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_DISPLAYNAME))
{
return iIcon;
}
iIcon=shFi.iIcon;
DestroyIcon(shFi.hIcon);
//删除文件
if(bFileCreated)
{
CFileTool::DelFile(str);
}
return iIcon;
}
其中用到的文件工具类代码如下:
string CFileTool::GetExtName(const string fileName)
{//获取文件扩展名
string result = "";
int pos = fileName.find_last_of(''.'');
if(pos != -1)
{
result = fileName.substr(pos,fileName.length() - pos);
}
return result;
}
string CFileTool::GetShortName(const string fileName)
{//获取短文件名
string result = fileName;
if(pos != -1)
{
result = fileName.substr(pos+1,fileName.length() - pos -1);
}
return result;
}
void CFileTool::NewFile(const char* fileName)
{//新建文件
FILE *file;
file = fopen(fileName,"w");
if(file!= NULL)
{
fclose(file);
}
}
void CFileTool::DelFile(const char* fileName)
{//删除文件
remove(fileName);
}
使用方法如下:
1. 在对话框中创建一个CTreeCtrl 树控件 m_tree
2. 在对话框初始化函数 OnInitDialog() 中为树控件设置系统图标列表
m_tree.SetImageList(CFileIcon::GetSysImgList(), TVSIL_NORMAL);
3. 往树控件中添加项
CString fileName = "filelist.txt"; //任意一个文件名 就一个 .txt 也行 :)
int iIcon = CFileIcon::GetSysIcon(fileName);//获取文件图标
m_tree.InsertItem(fileName,iIcon,iIcon);
运行效果如图:
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/c++/cppsl/200855/113035_2.html
- CTreeCtrl显示系统文件图标
- CTreeCtrl显示系统文件图标
- 关于在xp系统下CTreeCtrl控件不显示图标的一种解决方法
- Win7系统office2010文件图标无法显示
- c#使用系统ImageList显示文件图标
- MFC实现以系统图标显示的文件管理器
- 关于CTreeCtrl的图标
- CTreeCtrl图标使用方法
- CTreeCtrl图标使用方法
- 给ctreectrl添加图标
- CTreeCtrl图标使用方法
- 给ctreectrl添加图标
- CTreeCtrl图标使用方法
- CTreeCtrl图标使用方法
- CTreeCtrl图标使用方法
- TlistView显示文件图标
- MFC 树形控件CTreeCtrl显示文件路径及文件
- 获取系统文件图标
- linux indent格式化代码
- 函数对象
- LAMP安装网站记载
- 中国男篮的遮羞布没了
- 第一次
- CTreeCtrl显示系统文件图标
- VC lib 设置引起的一个链接错误
- 很精彩的预处理消息,空间不支持电机,在在预处理中这样处理
- 有意思的记事本藏猫猫事件
- Oracle查看及解决死锁
- 關務賬務SQL
- object-c 密码帐号加密 base64
- javascript 字符串和0比较
- 用C#通过DatabaseLink连接远程Oracle数据表的错误,及其变通方法