#include "common.h" #include "icons.h" HANDLE hIcoLibIconsChanged = NULL; extern HANDLE hMainMenuItem, hMainMenuItemRestart, hMainMenuItemUpdateAndExit; typedef struct { char* szDescr; char* szName; int defIconID; } IconStruct; static IconStruct iconList[] = { { "Check for Plugin Updates", "updater_check", IDI_MAINMENU }, { "Restart", "updater_restart", IDI_RESTART }, { "Update and Exit", "updater_checkexit", IDI_UPDATEANDEXIT }, }; HICON LoadIconEx(IconIndex i) { HICON hIcon; if (hIcoLibIconsChanged) hIcon = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)iconList[(int)i].szName); else hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE(iconList[(int)i].defIconID), IMAGE_ICON, 0, 0, 0); return hIcon; } void ReleaseIconEx(HICON hIcon) { if (hIcoLibIconsChanged) CallService(MS_SKIN2_RELEASEICON, (WPARAM)hIcon, 0); else DestroyIcon(hIcon); } int ReloadIcons(WPARAM wParam, LPARAM lParam) { // fix menu icons CLISTMENUITEM menu = {0}; menu.cbSize = sizeof(menu); menu.flags = CMIM_ICON; menu.hIcon = LoadIconEx(I_CHKUPD); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMainMenuItem, (LPARAM)&menu); ReleaseIconEx(menu.hIcon); menu.hIcon = LoadIconEx(I_RSTRT); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMainMenuItemRestart, (LPARAM)&menu); ReleaseIconEx(menu.hIcon); menu.hIcon = LoadIconEx(I_CHKUPDEXT); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMainMenuItemUpdateAndExit, (LPARAM)&menu); ReleaseIconEx(menu.hIcon); return 0; } void InitIcons(void) { SKINICONDESC sid = {0}; char path[MAX_PATH]; int i; sid.cbSize = sizeof(SKINICONDESC); sid.pszSection = MODULE; sid.pszDefaultFile = path; GetModuleFileNameA(hInst, path, sizeof(path)); for (i = 0; i < sizeof(iconList) / sizeof(IconStruct); ++i) { sid.pszDescription = Translate(iconList[i].szDescr); sid.pszName = iconList[i].szName; sid.iDefaultIndex = -iconList[i].defIconID; CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); } hIcoLibIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, ReloadIcons); } void DeinitIcons(void) { if (hIcoLibIconsChanged) UnhookEvent(hIcoLibIconsChanged); }