📄 fileimagelist.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 + -