CFileDialog FDlg(TRUE);//用打开文件对话框获取文件名
CImageList IconList;
SHFILEINFO fileInfo = {0};
FileName = FDlg.GetPathName();ret = SHGetFileInfo(FileName, 0,&fileInfo, sizeof(fileInfo), SHGFI_ICON|SHGFI_SMALLICON|SHGFI_DISPLAYNAME);
HICON hIcon = fileInfo.hIcon;//调试执行时获取的图标hIcon (expression can not be envaluted)
IconList.Add(hIcon);//出错调试时查看fileInfo.szDisplayName为正常文件名,而为什么获取图标句柄会失败?
CImageList IconList;
SHFILEINFO fileInfo = {0};
FileName = FDlg.GetPathName();ret = SHGetFileInfo(FileName, 0,&fileInfo, sizeof(fileInfo), SHGFI_ICON|SHGFI_SMALLICON|SHGFI_DISPLAYNAME);
HICON hIcon = fileInfo.hIcon;//调试执行时获取的图标hIcon (expression can not be envaluted)
IconList.Add(hIcon);//出错调试时查看fileInfo.szDisplayName为正常文件名,而为什么获取图标句柄会失败?
解决方案 »
- recset.Open 时发生错误 Microsofe Jet数据库找不到对象'Sheet1'
- 在视图类创建对话框时,视图窗口总是会出现一个小方框
- Dll 怎样访问 EXE的函数和变量,查了一天没有根本解决,那位高人指点
- 如何禁止用户删除受保护文件?
- 点击菜单,在文档中显示字符!(想不出来,只有求人了)
- 学VC++用什么教程好?
- 请教两个SDK问题。谢谢
- 关于一窗口多视图的问题
- 谁帮我解释一下ipicture的render函数
- 关于vc.net一个UserName->SelectCommand->Parameters->Item[0]->Value=TBoxUserID->Text问题,
- winsock2链接的库叫做Ws2_32.lib,那么64位系统上面是Ws2_64么?
- cwnd问题
========
试了一下你的代码,发现SHGetFileInfo没有错误,HICON hIcon也是正确的,主要原因是CImageList,这个建立一个变量后,还要调用Create才能工作.
LZ试下这样写参数::SHGetFileInfo(strOpenFileName,0,&shfileinfo,sizeof(shfileinfo),SHGFI_ICON)
IconList.Create(24,24,ILC_COLOR32|ILC_MASK,10,10); //生成图标列表
另外掘取图标这么写
if(SHGetFileInfo(FileName, 0,&fileInfo, sizeof(fileInfo), SHGFI_ICON))
{
IconList.Add(fileInfo.hIcon);
}
LZ试下这样写参数
================
不用CImageList当然是可以的,他的代码SHGetFileInfo用的是对的,取得的HICON也是正确的,他的IconList.Add(hIcon);不能工作的原因是因为IConList没有先Create,所以Add出错。
SetImageList(imageList, LVSIL_NORMAL); // 设置图标链表
imageList->Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR24, 50, 50);//CImageList对象建立后,还要调用Create才能工作! /*TCHAR shortName[MAX_PATH];