给SHGetFileInfo函数传递参数

hefenglily 2003-08-22 10:04:54
用SHGetFileInfo获得其它应用程序的图标并在列表视图中显示请看下面代码
GetExeFileIcon(CString strGameName,CString strGamePath,int iItem)
//strGameName为列表项的名字,strGamePath 为可执行文件的路径 iItem为列表项
{
HIMAGELIST hImageList;
SHFILEINFO fileinfo;
hImageList= (HIMAGELIST)::SHGetFileInfo(strGamePath,0,&fileinfo,sizeof(fileinfo),SHGFI_ICON|SHGFI_SYSICONINDEX);
//m_pImage为头文件中定义的CImageList * m_pImage
m_pImage->Attach(hImageList);
//m_wndListCtrl为CListCtrl m_wndListCtrl
m_wndListCtrl.SetImageList(m_pImage, LVSIL_NORMAL);

CString * pp=new CString;
pp->Format(_T("%s"),strGamePath);
m_wndListCtrl.InsertItem(iItem,strGameName,fileinfo.iIcon);
m_wndListCtrl.SetItemData(iItem,(DWORD)pp);

但是不能显示出图标,因为SHGetFileInfo中的第一个参数为LPCTSTR类型但是
CString类型有可以用LPCTSTR转化为LPCTSRT类型即使用(LPCTSTR)strGamePath作为
第一个参数也不能显示出图标,但是如果用_T("G:\\pp.exe")来代替strGamePath 能显示出图标,(路径没有问题在strGamePath中都加了\\)
我想一定是第一个参数的问题如何将CString 转化为LPCTSTR
或者有另外的方法获得应用程序的图标



...全文
52 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hefenglily 2003-08-22
  • 打赏
  • 举报
回复
我已找出原因了.我在strGamePath中将所有的\换为\\,但是SHGetFileInfo中的第一个参数
不能用\\,只能用\.不过还是谢谢gzshd的回答
lygfqy 2003-08-22
  • 打赏
  • 举报
回复
取图标?ExtractIcon();
gzshd 2003-08-22
  • 打赏
  • 举报
回复
GetFileIcon(CString& fileName,int* iIcon,int* iIconSel)
{
CString str=fileName;
if(str.Right(1)!="\\")
str+="\\";
SHFILEINFO shFi;
if(!SHGetFileInfo(str,0,&shFi,sizeof(shFi),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_DISPLAYNAME))
{
AfxMessageBox("111");
return;
}
*iIcon=shFi.iIcon;
DestroyIcon(shFi.hIcon);
if(iIconSel)
{
if(!SHGetFileInfo(str,0,&shFi,sizeof(shFi),SHGFI_ICON|SHGFI_SMALLICON|SHGFI_OPENICON|SHGFI_DISPLAYNAME))
{
AfxMessageBox("222");
return;
}
*iIconSel=shFi.iIcon;
DestroyIcon(shFi.hIcon);
}
// fileName=shFi.szDisplayName;
return ;
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧