在XP系统下 怎么获取文件图标HICON

音乐男 2014-06-11 12:24:36
在XP系统下 怎么获取文件图标HICON,想绘制出文件夹有文件状态的图标 求指教!

下面是测试代码


#include <shlobj.h>
#include <shlguid.h>
#include <shellapi.h>
#include <commctrl.h>
#include <commoncontrols.h>
#include <shellapi.h>

void CGetIcoDlg::OnBnClickedButton1()
{
SHFILEINFO sfi = { 0 };
SHGetFileInfo("F:\\360data\\重要数据\\桌面\\ff.lnk", -1, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX);

HIMAGELIST* imageList;
HRESULT hResult = SHGetImageList(SHIL_JUMBO, IID_IImageList, (void**)&imageList);//SHIL_EXTRALARGE
HICON hIcon;
if (hResult == S_OK)
{

hResult = ((IImageList*)imageList)->GetIcon(sfi.iIcon, ILD_TRANSPARENT, &hIcon);
if (hResult == S_OK){
// Do something with the icon here.
}

HDC hdc=::GetWindowDC(m_hWnd);
HICON hicons=hIcon;
DrawIcon(hdc,100, 100, hicons);
}
}

...全文
134 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
音乐男 2014-06-11
  • 打赏
  • 举报
回复
如图:获取文件夹 的图标信息
在WIN7下,文件夹的图标会更具文件夹内容的不同而改变图标样式,这个能够获取不? 不能获取难得只能自绘文件夹图标?

使用 SHGetFileInfo + SHGetImageList 函数只能获取到空文件夹的图标
音乐男 2014-06-11
  • 打赏
  • 举报
回复
如图:获取文件夹 的图标信息 在WIN7下,文件夹的图标会更具文件夹内容的不同而改变图标样式,这个能够获取不? 不能获取难得只能自绘文件夹图标? 使用 SHGetFileInfo + SHGetImageList 函数只能获取到空文件夹的图标
「已注销」 2014-06-11
  • 打赏
  • 举报
回复
HICON myIcon=AfxGetApp()->LoadIcon(IDI_ICON2); 用全局函数AfxGetApp这个函数的LoadIcon
音乐男 2014-06-11
  • 打赏
  • 举报
回复
我主要是想获取任意文件、文件夹等图标,并能展示文件夹有五文件预览的状态 ,LoadIcon怎么实现啊 BOOL GetSystmpIcon(LPCSTR pszPath,DWORD dwIcoType,BOOL bIsOpenFld,HICON& hIcon) { SHFILEINFO info = { 0 }; if (bIsOpenFld){//是否是设置图标为打开的样式 SHGetFileInfo(pszPath, -1, &info, sizeof(info), SHGFI_SYSICONINDEX|SHGFI_OPENICON); }else{ SHGetFileInfo(pszPath, -1, &info, sizeof(info), SHGFI_SYSICONINDEX); } // Retrieve the system image list. // To get the 48x48 icons, use SHIL_EXTRALARGE // To get the 256x256 icons (Vista only), use SHIL_JUMBO HIMAGELIST* imageList; HRESULT hResult = SHGetImageList(dwIcoType, IID_IImageList, (void**)&imageList);//SHIL_EXTRALARGE HICON hIco; if (hResult == S_OK) { // Get the icon we need from the list. Note that the HIMAGELIST we retrieved // earlier needs to be casted to the IImageList interface before use. hResult = ((IImageList*)imageList)->GetIcon(info.iIcon, ILD_TRANSPARENT, &hIco); if (hResult == S_OK){ // Do something with the icon here. hIcon=hIco; return TRUE; } } return FALSE; } 调用: HICON hIcon; GetSystmpIcon("F:\\360data\\重要数据\\桌面\\桌面文 件",SHIL_EXTRALARGE,TRUE,hIcon);//SHIL_EXTRALARGE|SHIL_JUMBO HDC hdc=::GetWindowDC(m_hWnd); DrawIcon(hdc,100, 100, hIcon);

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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