#include "commonheaders.h" typedef struct { HICON icon; SHORT mode; } ICON_CACHE; ICON_CACHE *ICONS_CACHE = NULL; int icons_cache = 0; // преобразует mode в HICON который НЕ НУЖНО разрушать в конце HICON mode2icon(int mode,int type) { int m=mode&0x0f,s=(mode&SECURED)>>4,i; // разобрали на части - режим и состояние HICON icon; if ( icons_cache ) { for(i=0;i>4; // разобрали на части - режим и состояние if ( mode==-1 || (!s && !bASI && m!=MODE_PGP && m!=MODE_GPG) ) { return g_IEC[0]; // вернем пустое место } int i=1+m*IEC_CNT+IEC_CL_DIS+s; if ( g_IEC[i].hImage==(HANDLE)-1 ) { /* g_hIEC[i] = mode2icon(mode,1); g_IEC[i].hImage = (HANDLE) CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)g_hIEC[i], (LPARAM)0);*/ HICON icon = mode2icon(mode,1); g_IEC[i].hImage = (HANDLE) CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)icon, (LPARAM)0); } return g_IEC[i]; } // обновляет иконки в clist и в messagew void ShowStatusIcon(HANDLE hContact,int mode) { HANDLE hMC = getMetaContact(hContact); if ( bADV || g_hCLIcon ) { // обновить иконки в clist if ( mode!= -1 ) { IconExtraColumn iec=mode2iec(mode); if ( g_hCLIcon ) { ExtraIcon_SetIcon(g_hCLIcon, hContact, iec.hImage); if ( hMC ) ExtraIcon_SetIcon(g_hCLIcon, hMC, iec.hImage); } else { CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hContact, (LPARAM)&iec); if ( hMC ) CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hMC, (LPARAM)&iec); } } } if ( ServiceExists(MS_MSG_MODIFYICON) ) { // обновить иконки в srmm StatusIconData sid; memset(&sid,0,sizeof(sid)); sid.cbSize = sizeof(sid); sid.szModule = (char*)szModuleName; for(int i=MODE_NATIVE; i