mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.9 KiB
118 lines
3.9 KiB
int LookupIconIndex(LPCTSTR szFile, int iIconIndex, UINT uFlags);
|
|
void AddToIconTable (LPCTSTR szFile, int iIconIndex, UINT uFlags, int iIndex);
|
|
void RemoveFromIconTable(LPCTSTR szFile, BOOL fNotify);
|
|
void FlushIconCache(void);
|
|
int GetFreeImageIndex(void);
|
|
|
|
void Icon_FSEvent (LONG lEvent, LPCITEMIDLIST pidl, LPCITEMIDLIST pidlExtra);
|
|
|
|
void _IconCacheDump(void); // DEBUG ONLY
|
|
void _IconCacheFlush(BOOL fForce);
|
|
BOOL _IconCacheSave(void);
|
|
BOOL _IconCacheRestore(int cxIcon, int cyIcon, int cxSmIcon, int cySmIcon, UINT flags);
|
|
|
|
DWORD LookupFileClass(LPCTSTR szClass);
|
|
void AddFileClass(LPCTSTR szClass, DWORD dw);
|
|
void FlushFileClass(void);
|
|
|
|
LPCTSTR LookupFileClassName(LPCTSTR szClass);
|
|
LPCTSTR AddFileClassName(LPCTSTR szClass, LPCTSTR szClassName);
|
|
|
|
UINT GetCurColorRes(void);
|
|
|
|
//
|
|
// these GIL_ (GetIconLocation) flags are used when searching for a
|
|
// match in the icon table. all other flags are ignored (when searching
|
|
// for a match)
|
|
//
|
|
#define GIL_COMPARE (GIL_SIMULATEDOC|GIL_NOTFILENAME)
|
|
|
|
|
|
//
|
|
// Icon Time
|
|
//
|
|
// all file/icons in the location table are "time stamped"
|
|
// each time they are accessed.
|
|
//
|
|
// this way we know the most important ones (MRU)
|
|
//
|
|
// when the icon cache get tooooo big we sort them all
|
|
// and throw out the old ones.
|
|
//
|
|
|
|
#define ICONTIME_ZERO 0
|
|
#define ICONTIME_MAX 0xFFFFFFFF
|
|
|
|
extern DWORD IconTimeBase; // base time.
|
|
extern DWORD IconTimeFlush; // time of last flush
|
|
|
|
//
|
|
// GetIconTime() returns the "clock" used to timestamp icons
|
|
// in the icon table for MRU. the clock incrments once every 1024ms
|
|
// (about once every second)
|
|
//
|
|
#define GetIconTime() (IconTimeBase + (GetTickCount() >> 10))
|
|
|
|
//
|
|
// g_MaxIcons is limit on the number of icons in the cache
|
|
// when we reach this limit we will start to throw icons away.
|
|
//
|
|
extern int g_MaxIcons; // panic limit for cache size
|
|
#ifdef DEBUG
|
|
#define DEF_MAX_ICONS 200 // to test the flush code more offten
|
|
#else
|
|
#define DEF_MAX_ICONS 500 // normal end user number, BUGBUG read from registry??
|
|
#endif
|
|
|
|
//
|
|
// refreshes g_MaxIcons from registry. returns TRUE if value changed.
|
|
//
|
|
BOOL QueryNewMaxIcons(void);
|
|
|
|
//
|
|
// MIN_FLUSH is the minimum time interval between flushing the icon cache
|
|
// this number is in IconTime
|
|
//
|
|
#define MIN_FLUSH 900 // 900 == about 15min
|
|
|
|
//
|
|
// g_iLastSysIcon is an indicator that is used to help determine which icons
|
|
// should be flushed and which icons shouldn't. In the EXPLORER.EXE process,
|
|
// the first 40 or so icons should be saved. On all other processes, only
|
|
// the icon overlay's should be saved.
|
|
extern UINT g_iLastSysIcon;
|
|
|
|
//------------------ location table ------------------------
|
|
|
|
typedef struct {
|
|
LPCTSTR szName; // key: file name
|
|
int iIconIndex; // key: icon index (or random DWORD for GIL_NOTFILE)
|
|
UINT uFlags; // GIL_* flags
|
|
int iIndex; // data: system image list index
|
|
UINT Access; // last access.
|
|
} LOCATION_ENTRY, *PLOCATION_ENTRY;
|
|
|
|
typedef struct {
|
|
DWORD cbSize; // size of this header.
|
|
DWORD uMagic; // magic number
|
|
DWORD uVersion; // version of this saved icon cache
|
|
DWORD dwBuild; // windows build number
|
|
DWORD uNumIcons; // number of icons in cache
|
|
DWORD uColorRes; // color resolution of device at last save
|
|
DWORD flags; // ILC_* flags
|
|
DWORD cxIcon; // x icon size of cache
|
|
DWORD cyIcon; // y icon size of cache
|
|
DWORD cxSmIcon; // x icon size of cache
|
|
DWORD cySmIcon; // y icon size of cache
|
|
DWORD TimeSave; // icon time this file was saved
|
|
DWORD TimeFlush; // icon time we last flushed.
|
|
DWORD FreeImageCount;
|
|
DWORD FreeEntryCount;
|
|
} IC_HEAD;
|
|
|
|
#define ICONCACHE_MAGIC (TEXT('W') + (TEXT('i') << 8) + (TEXT('n') << 16) + (TEXT('4') << 24))
|
|
#ifdef UNICODE
|
|
#define ICONCACHE_VERSION 0x0402 // Unicode file names
|
|
#else
|
|
#define ICONCACHE_VERSION 0x0401 // Ansi file names
|
|
#endif
|