C++ 獲取選中文件大圖標

  1. SHGetFileInfo 獲取選中文件小圖標
SHGetFileInfoA(szFile, FILE_ATTRIBUTE_DIRECTORY, &info, sizeof(info), SHGFI_ICON | SHGFI_DISPLAYNAME)
  1. 通過SHGetImageListImageList_GetIcon 獲取對應的大圖標
HICON CMainWnd::GetDefaultIcon(LPCTSTR szFile)
{
	static bool bInit = false;
	static IImageList *imageList = NULL;
	
	if (!bInit && imageList == NULL)
	{
		bInit = true;
		IID IID_IImageList = { 0 };
		HRESULT hr = IIDFromString(L"{46EB5926-582E-4017-9FDF-E8998DAA0950}", &IID_IImageList);
		ASSERT(SUCCEEDED(hr));
		SHGetImageList(SHIL_EXTRALARGE, IID_IImageList, (void **)(&imageList));
	}
	
	SHFILEINFOA info = { 0 };
	if (SHGetFileInfoA(szFile, FILE_ATTRIBUTE_DIRECTORY, &info, sizeof(info), SHGFI_ICON | SHGFI_DISPLAYNAME))
	{
		HICON hIcon = info.hIcon;
		if (imageList)
		{
			hIcon = ImageList_GetIcon((HIMAGELIST)imageList, info.iIcon, 0);
			if (hIcon)
				DestroyIcon(info.hIcon);
			else
				hIcon = info.hIcon;
		}
		return hIcon;
	}
	return NULL;
}

包含:Shellapi.h Commctrl.h comctl32.lib

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章