⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileimagelist.cpp

📁 GPlayer for Pocket PC,移动设备上的播放器
💻 CPP
字号:
// fileimagelist.cpp

#include "resource.h"
#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#include "multibuff.h"
#include "wcehelper.h"
#include "fileimagelist.h"



CFileImageList::CFileImageList()
{
	m_himl = NULL;
}

CFileImageList::~CFileImageList()
{
}

void CFileImageList::Init(BOOL fFolderIcon)
{
	if (m_himl)
		Destroy();

	int isize=GetSystemMetrics(SM_CXSMICON);
	m_himl = ImageList_Create(isize, isize, ILC_COLOR | ILC_MASK, 3, 512);
	if (fFolderIcon) {
		HINSTANCE hInst =LoadLibrary(_T("ceshell"));
		HICON hIcon = (HICON)LoadImage(hInst, (LPCTSTR)1201, IMAGE_ICON, 16, 16, 0);
		ImageList_AddIcon(m_himl, hIcon);
		DestroyIcon(hIcon);
		FreeLibrary(hInst);
	}
	else {
		SHFILEINFO shfi;
		SHGetFileInfo(_T("\\Windows"), NULL, &shfi, sizeof(shfi), SHGFI_SMALLICON | SHGFI_ICON);
		ImageList_AddIcon(m_himl, shfi.hIcon);
		DestroyIcon(shfi.hIcon);
	}
}

void CFileImageList::Destroy()
{
	while (!m_listIndex.IsEmpty()) {
		IMAGELISTINDEX* pIndex = (IMAGELISTINDEX*)m_listIndex.RemoveAt(0);
		if (pIndex != NULL)
			delete pIndex;
	}
	ImageList_RemoveAll(m_himl);
	ImageList_Destroy(m_himl);
	m_himl = NULL;
}

BOOL SeekIndexCallback(LPARAM lParamItem, LPARAM lParamFind)
{
	IMAGELISTINDEX* pIndex = (IMAGELISTINDEX*)lParamItem;
	LPTSTR pszExt = (LPTSTR)lParamFind;
	if (wcscmp(pszExt, pIndex->szExt)==0)
		return FALSE;
	else
		return TRUE;
}

int CFileImageList::GetImageListIndex(LPCTSTR pszFileName, LPCTSTR pszPath)
{
	TCHAR szPath[MAX_PATH];
	wsprintf(szPath, _T("%s\\%s"), pszPath, pszFileName);
	return GetImageListIndex(szPath);
}

int CFileImageList::GetImageListIndex(LPCTSTR pszPath)
{
	TCHAR szPath[MAX_PATH];
	TCHAR szExt[MAX_PATH];
	LPTSTR psz;
	int nIndex;

	DWORD dwAttr = GetFileAttributes(pszPath);
	if (dwAttr == 0xFFFFFFFF)
		return -1; // failture

	if (dwAttr & FILE_ATTRIBUTE_DIRECTORY && 
		!(dwAttr & FILE_ATTRIBUTE_TEMPORARY))
		return 0;

	_tcscpy(szPath, pszPath);
	_tcsupr(szPath);
	psz = wcsrchr(szPath, _T('.'));
	memset(szExt, 0, sizeof(szExt));
	if (dwAttr & FILE_ATTRIBUTE_DIRECTORY && 
		dwAttr & FILE_ATTRIBUTE_TEMPORARY)
		_tcscpy(szExt, szPath);
	else if (psz == NULL)
		_tcscpy(szExt, _T("\\\\\\"));
	else if (wcscmp(psz, _T(".EXE"))==0 || wcscmp(psz, _T(".LNK"))==0)
		_tcscpy(szExt, szPath);
	else
		_tcscpy(szExt, psz);

	nIndex = m_listIndex.Find(SeekIndexCallback, 0, (DWORD)szExt);
	if (nIndex >= 0) {
		IMAGELISTINDEX* pRet = (IMAGELISTINDEX*)m_listIndex.GetAt(nIndex);
		return pRet->nIndex;
	}

	SHFILEINFO shfi;
	SHGetFileInfo(pszPath, NULL, &shfi, sizeof(shfi), SHGFI_SMALLICON | SHGFI_ICON);
	nIndex = ImageList_AddIcon(m_himl, shfi.hIcon);
	IMAGELISTINDEX* pIndex = new IMAGELISTINDEX;
	memset(pIndex, 0, sizeof(IMAGELISTINDEX));
	pIndex->nIndex = nIndex;
	_tcscpy(pIndex->szExt, szExt);
	m_listIndex.Add((DWORD)pIndex);
	return nIndex;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -