int OnIconChange(WPARAM, LPARAM) { mir_cslock lck(csButtonsHook); for (int i = 0; i < Buttons.getCount(); i++) { TopButtonInt *b = Buttons[i]; if (!b->hIconHandleUp && !b->hIconHandleDn) continue; if (b->hIconHandleUp) { IcoLib_ReleaseIcon(b->hIconUp); b->hIconUp = IcoLib_GetIconByHandle(b->hIconHandleUp); } if (b->hIconHandleDn) { IcoLib_ReleaseIcon(b->hIconDn); b->hIconDn = IcoLib_GetIconByHandle(b->hIconHandleDn); } DestroyWindow(b->hwnd); b->CreateWnd(); } if (g_ctrl->hWnd) { g_ctrl->bOrderChanged = true; PostMessage(g_ctrl->hWnd, TTB_UPDATEFRAMEVISIBILITY, 0, 0); } return 0; }
LRESULT CALLBACK DlgProcPopup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CONTEXTMENU: PUDeletePopup(hWnd); break; case WM_COMMAND: switch ((INT_PTR)PUGetPluginData(hWnd)) { case 0: OpenAuthUrl("http://vi.miranda-ng.org/detail/%s"); break; case 1: OpenAuthUrl("http://vi.miranda-ng.org/global/%s"); break; case 3: TCHAR path[MAX_PATH]; mir_sntprintf(path, TEXT("%s\\VersionInfo.txt"), VersionInfoFolder); ShellExecute(NULL, TEXT("open"), path, NULL, NULL, SW_SHOW); break; } PUDeletePopup(hWnd); break; case UM_FREEPLUGINDATA: IcoLib_ReleaseIcon((HICON)SendMessage(hWnd, WM_SETICON, ICON_BIG, 0)); IcoLib_ReleaseIcon((HICON)SendMessage(hWnd, WM_SETICON, ICON_SMALL, 0)); break; } return DefWindowProc(hWnd, msg, wParam, lParam); }
HICON __fastcall CreateIconFromIndexes(short base, short overlay, short overlay2, short overlay3, short overlay4) { HICON hIcon = NULL; // returned HICON HICON hTmp = NULL; HICON icMain = NULL; HICON icOverlay = NULL; HICON icOverlay2 = NULL; HICON icOverlay3 = NULL; HICON icOverlay4 = NULL; KN_FP_MASK* mainMask = &(def_kn_fp_mask[base]); icMain = IcoLib_GetIconByHandle(mainMask->hIcolibItem); if (icMain) { KN_FP_MASK* overlayMask = (overlay != -1) ? &(def_kn_fp_overlays_mask[overlay]) : NULL; KN_FP_MASK* overlay2Mask = (overlay2 != -1) ? &(def_kn_fp_overlays2_mask[overlay2]) : NULL; KN_FP_MASK* overlay3Mask = (overlay3 != -1) ? &(def_kn_fp_overlays3_mask[overlay3]) : NULL; KN_FP_MASK* overlay4Mask = (overlay4 != -1) ? &(def_kn_fp_overlays4_mask[overlay4]) : NULL; icOverlay = (overlayMask == NULL) ? NULL : IcoLib_GetIconByHandle(overlayMask->hIcolibItem); icOverlay2 = (overlay2Mask == NULL) ? NULL : IcoLib_GetIconByHandle(overlay2Mask->hIcolibItem); icOverlay3 = (overlay3Mask == NULL) ? NULL : IcoLib_GetIconByHandle(overlay3Mask->hIcolibItem); icOverlay4 = (overlay4Mask == NULL) ? NULL : IcoLib_GetIconByHandle(overlay4Mask->hIcolibItem); hIcon = icMain; if (overlayMask) hTmp = hIcon = CreateJoinedIcon(hIcon, icOverlay); if (overlay2Mask) { hIcon = CreateJoinedIcon(hIcon, icOverlay2); if (hTmp) DestroyIcon(hTmp); hTmp = hIcon; } if (overlay3Mask) { hIcon = CreateJoinedIcon(hIcon, icOverlay3); if (hTmp) DestroyIcon(hTmp); hTmp = hIcon; } if (overlay4Mask) { hIcon = CreateJoinedIcon(hIcon, icOverlay4); if (hTmp) DestroyIcon(hTmp); } } if (hIcon == icMain) hIcon = CopyIcon(icMain); IcoLib_ReleaseIcon(icMain); IcoLib_ReleaseIcon(icOverlay); IcoLib_ReleaseIcon(icOverlay2); IcoLib_ReleaseIcon(icOverlay3); IcoLib_ReleaseIcon(icOverlay4); return hIcon; }
void CJabberInfoFrame::PaintCompact(HDC hdc) { RECT rc; GetClientRect(m_hwnd, &rc); char *glyphs[] = { "Main,ID=ProtoInfo", "Main,ID=EventArea", "Main,ID=StatusBar", NULL }; PaintSkinGlyph(hdc, &rc, glyphs, m_clBack); HFONT hfntSave = (HFONT)SelectObject(hdc, m_hfntTitle); SetBkMode(hdc, TRANSPARENT); SetTextColor(hdc, m_clTitle); int cx_icon = GetSystemMetrics(SM_CXSMICON); int cy_icon = GetSystemMetrics(SM_CYSMICON); int cx = rc.right - cx_icon - SZ_FRAMEPADDING; for (int i = m_pItems.getCount(); i--;) { CJabberInfoFrameItem &item = m_pItems[i]; SetRect(&item.m_rcItem, 0, 0, 0, 0); if (!item.m_bShow) continue; if (!item.m_bCompact) continue; int depth = 0; for (char *p = item.m_pszName; p = strchr(p+1, '/'); ++depth) ; if (depth == 0) { if (item.m_hIcolibIcon) { HICON hIcon = IcoLib_GetIconByHandle(item.m_hIcolibIcon); if (hIcon) { DrawIconEx(hdc, SZ_FRAMEPADDING, (rc.bottom-cy_icon)/2, hIcon, cx_icon, cy_icon, 0, NULL, DI_NORMAL); IcoLib_ReleaseIcon(hIcon); } } RECT rcText; SetRect(&rcText, cx_icon + SZ_FRAMEPADDING + SZ_ICONSPACING, 0, rc.right - SZ_FRAMEPADDING, rc.bottom); DrawText(hdc, item.m_pszText, -1, &rcText, DT_NOPREFIX | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS); } else { if (item.m_hIcolibIcon) { HICON hIcon = IcoLib_GetIconByHandle(item.m_hIcolibIcon); if (hIcon) { SetRect(&item.m_rcItem, cx, (rc.bottom-cy_icon)/2, cx+cx_icon, (rc.bottom-cy_icon)/2+cy_icon); DrawIconEx(hdc, cx, (rc.bottom-cy_icon)/2, hIcon, cx_icon, cy_icon, 0, NULL, DI_NORMAL); cx -= cx_icon; IcoLib_ReleaseIcon(hIcon); SetToolTip(item.m_tooltipId, &item.m_rcItem, item.m_pszText); } } } } SelectObject(hdc, hfntSave); }
int ImageList_AddIconFromIconLib(HIMAGELIST hIml, int i) { HICON icon = IcoLib_GetIconByHandle(iconList[i].hIcolib); int res = ImageList_AddIcon(hIml, icon); IcoLib_ReleaseIcon(icon); return res; }
int ImageList_AddIcon_ProtoIconLibLoaded(HIMAGELIST hIml, const char *szProto, int iconId) { HICON hIcon = Skin_LoadProtoIcon(szProto, iconId); int res = ImageList_AddIcon(hIml, hIcon); IcoLib_ReleaseIcon(hIcon); return res; }
int ImageList_AddIcon_IconLibLoaded(HIMAGELIST hIml, int iconId) { HICON hIcon = Skin_LoadIcon(iconId); int res = ImageList_AddIcon(hIml, hIcon); IcoLib_ReleaseIcon(hIcon); return res; }
void UpDate_CountryIcon(HWND hCtrl, int countryID) { HICON hIcon = LoadFlagIcon(countryID); HICON hOld = Static_SetIcon(hCtrl, hIcon); ShowWindow(hCtrl, hIcon ? SW_SHOW : SW_HIDE); IcoLib_ReleaseIcon(hOld); }
static int OnModulesLoaded(WPARAM, LPARAM) { ReloadGlobals(); LoadGlobalIcons(); LoadMsgLogIcons(); ModuleLoad(0, 0); CMenuItem mi; SET_UID(mi, 0x58d8dc1, 0x1c25, 0x49c0, 0xb8, 0x7c, 0xa3, 0x22, 0x2b, 0x3d, 0xf1, 0xd8); mi.position = -2000090000; mi.flags = CMIF_DEFAULT; mi.hIcolibItem = Skin_GetIconHandle(SKINICON_EVENT_MESSAGE); mi.name.a = LPGEN("&Message"); mi.pszService = MS_MSG_SENDMESSAGE; hMsgMenuItem = Menu_AddContactMenuItem(&mi); IcoLib_ReleaseIcon((HICON)mi.hIcolibItem); HookEvent(ME_SMILEYADD_OPTIONSCHANGED, SmileySettingsChanged); HookEvent(ME_IEVIEW_OPTIONSCHANGED, SmileySettingsChanged); HookEvent(ME_AV_AVATARCHANGED, AvatarChanged); HookEvent(ME_FONT_RELOAD, FontServiceFontsChanged); HookEvent(ME_MSG_ICONPRESSED, StatusIconPressed); HookEvent(ME_MC_DEFAULTTCHANGED, MetaContactChanged); RestoreUnreadMessageAlerts(); OptionsInit(); RegisterStatusIcons(); return 0; }
static HTREEITEM AddLine(HWND hTree,TopButtonInt *b, HTREEITEM hItem, HIMAGELIST il) { TVINSERTSTRUCT tvis = { 0 }; tvis.hInsertAfter = hItem; tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; int index; TCHAR* tmp; if (b->dwFlags & TTBBF_ISSEPARATOR) { tvis.item.pszText = _T("------------------"); index = -1; } else { if (b->hIconHandleUp) { HICON hIcon = IcoLib_GetIconByHandle(b->hIconHandleUp); index = ImageList_AddIcon(il, hIcon); IcoLib_ReleaseIcon(hIcon); } else index = ImageList_AddIcon(il, b->hIconUp); tmp = mir_a2t( b->pszName ); tvis.item.pszText = TranslateTS(tmp); } tvis.item.iImage = tvis.item.iSelectedImage = index; tvis.item.lParam = (LPARAM)b; HTREEITEM hti = TreeView_InsertItem(hTree, &tvis); if (!(b->dwFlags & TTBBF_ISSEPARATOR)) mir_free(tmp); TreeView_SetCheckState(hTree, hti, b->isVisible()); return hti; }
void VoiceProvider::ReleaseIcon(HICON hIcon) { if (hIcon == NULL) return; if (!IsEmptyA(icon)) IcoLib_ReleaseIcon(hIcon); }
int onShutdown(WPARAM, LPARAM) { DestroyServiceFunction(hContactReturnedAction); DestroyServiceFunction(hContactStillAbsentAction); DestroyServiceFunction(hMissYouAction); DestroyServiceFunction(hMenuMissYouClick); IcoLib_ReleaseIcon(hIcon); return 0; }
void CJabberDlgGcJoin::OnDestroy() { IcoLib_ReleaseIcon((HICON)SendDlgItemMessage(m_hwnd, IDC_BOOKMARKS, BM_SETIMAGE, IMAGE_ICON, 0)); m_proto->m_pDlgJabberJoinGroupchat = NULL; DeleteObject((HFONT)SendDlgItemMessage(m_hwnd, IDC_TXT_RECENT, WM_GETFONT, 0, 0)); CSuper::OnDestroy(); mir_free(m_jid); m_jid = NULL; }
void CJabberInfoFrame::PaintNormal(HDC hdc) { RECT rc; GetClientRect(m_hwnd, &rc); char *glyphs[] = { "Main,ID=ProtoInfo", "Main,ID=EventArea", "Main,ID=StatusBar", NULL }; PaintSkinGlyph(hdc, &rc, glyphs, m_clBack); HFONT hfntSave = (HFONT)SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)); SetBkMode(hdc, TRANSPARENT); int cx_icon = GetSystemMetrics(SM_CXSMICON); int cy_icon = GetSystemMetrics(SM_CYSMICON); int line_height = cy_icon + SZ_LINEPADDING; int cy = SZ_FRAMEPADDING; for (int i=0; i < m_pItems.getCount(); i++) { CJabberInfoFrameItem &item = m_pItems[i]; if (!item.m_bShow) { SetRect(&item.m_rcItem, 0, 0, 0, 0); continue; } int cx = SZ_FRAMEPADDING; int depth = 0; for (char *p = item.m_pszName; p = strchr(p+1, '/'); cx += cx_icon) ++depth; SetRect(&item.m_rcItem, cx, cy, rc.right - SZ_FRAMEPADDING, cy + line_height); if (item.m_hIcolibIcon) { HICON hIcon = IcoLib_GetIconByHandle(item.m_hIcolibIcon); if (hIcon) { DrawIconEx(hdc, cx, cy + (line_height-cy_icon)/2, hIcon, cx_icon, cy_icon, 0, NULL, DI_NORMAL); cx += cx_icon + SZ_ICONSPACING; IcoLib_ReleaseIcon(hIcon); } } SelectObject(hdc, depth ? m_hfntText : m_hfntTitle); SetTextColor(hdc, depth ? m_clText : m_clTitle); RECT rcText; SetRect(&rcText, cx, cy, rc.right - SZ_FRAMEPADDING, cy + line_height); DrawText(hdc, item.m_pszText, -1, &rcText, DT_NOPREFIX|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS); RemoveTooltip(item.m_tooltipId); cy += line_height + SZ_LINESPACING; } SelectObject(hdc, hfntSave); }
static int MO_ReloadIcon(TMO_IntMenuItem *pmi, void*) { if (pmi->hIcolibItem) { HICON newIcon = IcoLib_GetIconByHandle(pmi->hIcolibItem, false); if (newIcon) ImageList_ReplaceIcon(pmi->parent->m_hMenuIcons, pmi->iconId, newIcon); IcoLib_ReleaseIcon(newIcon); } return FALSE; }
MIR_APP_DLL(HGENMENU) Menu_AddItem(int hMenuObject, TMO_MenuItem *pmi, void *pUserData) { if (!bIsGenMenuInited || pmi == NULL) return NULL; mir_cslock lck(csMenuHook); TIntMenuObject *pmo = GetMenuObjbyId(hMenuObject); if (pmo == NULL) return NULL; TMO_IntMenuItem* p = (TMO_IntMenuItem*)mir_calloc(sizeof(TMO_IntMenuItem)); p->parent = pmo; p->signature = MENUITEM_SIGNATURE; p->iCommand = GetNextObjectMenuItemId(); p->mi = *pmi; p->iconId = -1; p->originalPosition = pmi->position; p->pUserData = pUserData; if (pmi->flags & CMIF_UNICODE) p->mi.name.t = mir_tstrdup(pmi->name.t); else p->mi.name.t = mir_a2u(pmi->name.a); if (pmi->hIcon != NULL && !bIconsDisabled) { HANDLE hIcolibItem = IcoLib_IsManaged(pmi->hIcon); if (hIcolibItem != NULL) { HICON hIcon = IcoLib_GetIconByHandle(hIcolibItem, false); p->iconId = ImageList_AddIcon(pmo->m_hMenuIcons, hIcon); p->hIcolibItem = hIcolibItem; IcoLib_ReleaseIcon(hIcon); } else p->iconId = ImageList_AddIcon(pmo->m_hMenuIcons, pmi->hIcon); } TMO_IntMenuItem *pRoot = (p->mi.root != NULL) ? MO_GetIntMenuItem(p->mi.root) : NULL; if (pRoot) { p->owner = &pRoot->submenu; if (pRoot->iconId == -1) pRoot->iconId = p->iconId; } else p->owner = &pmo->m_items; if (!p->owner->first) p->owner->first = p; if (p->owner->last) p->owner->last->next = p; p->owner->last = p; return p; }
static int MO_RegisterIcon(TMO_IntMenuItem *pmi, void*) { TCHAR *uname = (pmi->UniqName) ? mir_a2t(pmi->UniqName) : mir_tstrdup(pmi->CustomName), *descr = GetMenuItemText(pmi); if (!uname && !descr) return FALSE; if (!pmi->hIcolibItem) { HICON hIcon = ImageList_GetIcon(pmi->parent->m_hMenuIcons, pmi->iconId, 0); TCHAR sectionName[256]; mir_sntprintf(sectionName, LPGENT("Menu icons") _T("/%s"), TranslateTS(pmi->parent->ptszDisplayName)); char iconame[256]; mir_snprintf(iconame, "genmenu_%s_%s", pmi->parent->pszName, uname && *uname ? uname : descr); // remove '&' if (descr) { descr = NEWTSTR_ALLOCA(descr); for (TCHAR *p = descr; *p; p++) { if ((p = _tcschr(p, '&')) == NULL) break; memmove(p, p + 1, sizeof(TCHAR)*(mir_tstrlen(p + 1) + 1)); if (*p == '\0') p++; } } SKINICONDESC sid = { 0 }; sid.flags = SIDF_TCHAR; sid.section.t = sectionName; sid.pszName = iconame; sid.description.t = descr; sid.hDefaultIcon = hIcon; pmi->hIcolibItem = IcoLib_AddIcon(&sid, 0); Safe_DestroyIcon(hIcon); if (hIcon = IcoLib_GetIcon(iconame)) { ImageList_ReplaceIcon(pmi->parent->m_hMenuIcons, pmi->iconId, hIcon); IcoLib_ReleaseIcon(hIcon); } } mir_free(uname); return FALSE; }
void LoadMsgLogIcons(void) { HBRUSH hBkgBrush = CreateSolidBrush(db_get_dw(NULL, SRMMMOD, SRMSGSET_BKGCOLOUR, SRMSGDEFSET_BKGCOLOUR)); BITMAPINFOHEADER bih = { sizeof(bih) }; bih.biBitCount = 24; bih.biCompression = BI_RGB; bih.biHeight = 10; bih.biPlanes = 1; bih.biWidth = 10; int widthBytes = ((bih.biWidth * bih.biBitCount + 31) >> 5) * 4; RECT rc; rc.top = rc.left = 0; rc.right = bih.biWidth; rc.bottom = bih.biHeight; HDC hdc = GetDC(NULL); HBITMAP hBmp = CreateCompatibleBitmap(hdc, bih.biWidth, bih.biHeight); HDC hdcMem = CreateCompatibleDC(hdc); PBYTE pBmpBits = (PBYTE)mir_alloc(widthBytes * bih.biHeight); for (int i = 0; i < _countof(pLogIconBmpBits); i++) { HICON hIcon = IcoLib_GetIconByHandle(iconList[i].hIcolib); size_t size = RTFPICTHEADERMAXSIZE + (bih.biSize + widthBytes * bih.biHeight) * 2; pLogIconBmpBits[i] = (char*)mir_alloc(size); size_t rtfHeaderSize = mir_snprintf(pLogIconBmpBits[i], size, "{\\pict\\dibitmap0\\wbmbitspixel%u\\wbmplanes1\\wbmwidthbytes%u\\picw%u\\pich%u ", bih.biBitCount, widthBytes, bih.biWidth, bih.biHeight); HBITMAP hoBmp = (HBITMAP)SelectObject(hdcMem, hBmp); FillRect(hdcMem, &rc, hBkgBrush); DrawIconEx(hdcMem, 0, 0, hIcon, bih.biWidth, bih.biHeight, 0, NULL, DI_NORMAL); IcoLib_ReleaseIcon(hIcon); SelectObject(hdcMem, hoBmp); GetDIBits(hdc, hBmp, 0, bih.biHeight, pBmpBits, (BITMAPINFO*)&bih, DIB_RGB_COLORS); char *szDest = pLogIconBmpBits[i] + rtfHeaderSize; bin2hex(&bih, sizeof(bih), szDest); szDest += sizeof(bih) * 2; bin2hex(pBmpBits, widthBytes * bih.biHeight, szDest); szDest += widthBytes * bih.biHeight * 2; mir_strcpy(szDest, "}"); logIconBmpSize[i] = size_t(szDest - pLogIconBmpBits[i]) + 1; } mir_free(pBmpBits); DeleteDC(hdcMem); DeleteObject(hBmp); ReleaseDC(NULL, hdc); DeleteObject(hBkgBrush); }
virtual void OnInitDialog() { int numSlots = GetNumberOfSlots(); if (numSlots < (int)registeredExtraIcons.getCount()) { HWND label = GetDlgItem(m_hwnd, IDC_MAX_ICONS_L); SetWindowText(label, CMString(FORMAT, TranslateT("*only the first %d icons will be shown"), numSlots)); ShowWindow(label, SW_SHOW); } int cx = g_iIconSX; HIMAGELIST hImageList = ImageList_Create(cx, cx, ILC_COLOR32 | ILC_MASK, 2, 2); HICON hBlankIcon = (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_BLANK), IMAGE_ICON, cx, cx, 0); ImageList_AddIcon(hImageList, hBlankIcon); for (int i = 0; i < registeredExtraIcons.getCount(); i++) { ExtraIcon *extra = registeredExtraIcons[i]; HICON hIcon = IcoLib_GetIcon(extra->getDescIcon()); if (hIcon == NULL) ImageList_AddIcon(hImageList, hBlankIcon); else { ImageList_AddIcon(hImageList, hIcon); IcoLib_ReleaseIcon(hIcon); } } m_tree.SetImageList(hImageList, TVSIL_NORMAL); DestroyIcon(hBlankIcon); for (int k = 0; k < extraIconsBySlot.getCount(); k++) { ExtraIcon *extra = extraIconsBySlot[k]; if (extra->getType() == EXTRAICON_TYPE_GROUP) { ExtraIconGroup *group = (ExtraIconGroup *)extra; intlist ids; for (int j = 0; j < group->m_items.getCount(); j++) ids.add(group->m_items[j]->getID()); Tree_AddExtraIconGroup(ids, extra->isEnabled()); } else Tree_AddExtraIcon((BaseExtraIcon *)extra, extra->isEnabled()); } TVSORTCB sort = { 0 }; sort.hParent = NULL; sort.lParam = 0; sort.lpfnCompare = CompareFunc; m_tree.SortChildrenCB(&sort, 0); }
MIR_APP_DLL(int) Menu_ModifyItem(HGENMENU hMenuItem, const TCHAR *ptszName, HANDLE hIcolib, int iFlags) { if (!bIsGenMenuInited) return -1; mir_cslock lck(csMenuHook); TMO_IntMenuItem *pimi = MO_GetIntMenuItem(hMenuItem); if (pimi == NULL) return -1; if (ptszName != NULL) replaceStrT(pimi->mi.name.t, ptszName); if (iFlags != -1) { // we allow to set only first 3 bits int oldflags = (pimi->mi.flags & 0xFFFFFFF8); pimi->mi.flags = (iFlags & 0x07) | oldflags; } if (hIcolib != INVALID_HANDLE_VALUE && !bIconsDisabled) { HANDLE hIcolibItem = IcoLib_IsManaged((HICON)hIcolib); if (hIcolibItem) { HICON hIcon = IcoLib_GetIconByHandle(hIcolibItem, false); if (hIcon != NULL) { pimi->hIcolibItem = hIcolibItem; pimi->iconId = ImageList_ReplaceIcon(pimi->parent->m_hMenuIcons, pimi->iconId, hIcon); IcoLib_ReleaseIcon(hIcon); } else pimi->iconId = -1, pimi->hIcolibItem = NULL; } else { pimi->mi.hIcon = (HICON)hIcolib; if (hIcolib != NULL) pimi->iconId = ImageList_ReplaceIcon(pimi->parent->m_hMenuIcons, pimi->iconId, (HICON)hIcolib); else pimi->iconId = -1; //fixme, should remove old icon & shuffle all iconIds } if (pimi->hBmp) { DeleteObject(pimi->hBmp); pimi->hBmp = NULL; } } return 0; }
// always call in context of main thread static void __fastcall SetStatusIcon(MCONTACT hContact,int countryNumber) { StatusIconData sid = { sizeof(sid) }; sid.szModule = MODULENAME; if (countryNumber != 0xFFFF || bUseUnknown) { /* copy icon as status icon API will call DestroyIcon() on it */ sid.hIcon = LoadFlagIcon(countryNumber); sid.szTooltip = (char*) CallService(MS_UTILS_GETCOUNTRYBYNUMBER,countryNumber,0); } else sid.flags = MBF_HIDDEN; Srmm_ModifyIcon(hContact, &sid); if (sid.hIcon) IcoLib_ReleaseIcon(sid.hIcon); }
void VoiceCall::Notify(bool history, bool popup, bool sound, bool clist) { if (history) { TCHAR *variables[] = { _T("number"), displayName }; HistoryEvents_AddToHistoryVars(hContact, EVENTTYPE_VOICE_CALL, state, variables, MAX_REGS(variables), DBEF_READ | (incoming ? 0 : DBEF_SENT)); } if (popup) { TCHAR text[512]; mir_sntprintf(text, MAX_REGS(text), TranslateTS(stateTexts[state]), displayName); ShowPopup(NULL, TranslateTS(popupTitles[state]), text); } if (sound) SkinPlaySound(sounds[state].name); if (clist && state == VOICE_STATE_RINGING) { HICON hIcon = IcoLib_LoadIcon(stateIcons[VOICE_STATE_RINGING]); CLISTEVENT ce = {0}; ce.cbSize = sizeof(ce); ce.hContact = hContact; ce.hIcon = hIcon; ce.hDbEvent = (HANDLE) this; ce.pszService = MS_VOICESERVICE_CLIST_DBLCLK; ce.lParam = (LPARAM) this; CallService(MS_CLIST_ADDEVENT, 0, (LPARAM) &ce); IcoLib_ReleaseIcon(hIcon); clistBlinking = true; } if (hwnd_frame != NULL) PostMessage(hwnd_frame, WMU_REFRESH, 0, 0); }
void CJabberProto::InitPopups(void) { TCHAR desc[256]; mir_sntprintf(desc, _T("%s %s"), m_tszUserName, TranslateT("Errors")); char name[256]; mir_snprintf(name, "%s_%s", m_szModuleName, "Error"); POPUPCLASS ppc = { sizeof(ppc) }; ppc.flags = PCF_TCHAR; ppc.ptszDescription = desc; ppc.pszName = name; ppc.hIcon = LoadIconEx("main"); ppc.colorBack = RGB(191, 0, 0); //Red ppc.colorText = RGB(255, 245, 225); //Yellow ppc.iSeconds = 60; m_hPopupClass = Popup_RegisterClass(&ppc); IcoLib_ReleaseIcon(ppc.hIcon); }
static void SetFilenameControls(HWND hwndDlg, FileDlgData *dat, PROTOFILETRANSFERSTATUS *fts) { TCHAR msg[MAX_PATH]; TCHAR *fnbuf = NULL, *fn = NULL; SHFILEINFO shfi = { 0 }; if (fts->tszCurrentFile) { fnbuf = mir_tstrdup(fts->tszCurrentFile); if ((fn = _tcsrchr(fnbuf, '\\')) == NULL) fn = fnbuf; else fn++; } if (dat->hIcon) DestroyIcon(dat->hIcon); dat->hIcon = NULL; if (fn && (fts->totalFiles > 1)) { mir_sntprintf(msg, _T("%s: %s (%d %s %d)"), pcli->pfnGetContactDisplayName(fts->hContact, 0), fn, fts->currentFileNumber + 1, TranslateT("of"), fts->totalFiles); SHGetFileInfo(fn, FILE_ATTRIBUTE_DIRECTORY, &shfi, sizeof(shfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON); dat->hIcon = shfi.hIcon; } else if (fn) { mir_sntprintf(msg, _T("%s: %s"), pcli->pfnGetContactDisplayName(fts->hContact, 0), fn); SHGetFileInfo(fn, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(shfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON); dat->hIcon = shfi.hIcon; } else { mir_tstrncpy(msg, pcli->pfnGetContactDisplayName(fts->hContact, 0), _countof(msg)); HICON hIcon = Skin_LoadIcon(SKINICON_OTHER_DOWNARROW); dat->hIcon = CopyIcon(hIcon); IcoLib_ReleaseIcon(hIcon, NULL); } mir_free(fnbuf); SendDlgItemMessage(hwndDlg, IDC_FILEICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)dat->hIcon); SetDlgItemText(hwndDlg, IDC_CONTACTNAME, msg); }
static int TypingMessage(WPARAM hContact, LPARAM lParam) { if (!(g_dat.flags & SMF_SHOWTYPING)) return 0; hContact = db_mc_tryMeta(hContact); SkinPlaySound((lParam) ? "TNStart" : "TNStop"); HWND hwnd = WindowList_Find(g_dat.hMessageWindowList, hContact); if (hwnd) SendMessage(hwnd, DM_TYPING, 0, lParam); else if (lParam && (g_dat.flags & SMF_SHOWTYPINGTRAY)) { TCHAR szTip[256]; mir_sntprintf(szTip, TranslateT("%s is typing a message"), pcli->pfnGetContactDisplayName(hContact, 0)); if (ServiceExists(MS_CLIST_SYSTRAY_NOTIFY) && !(g_dat.flags & SMF_SHOWTYPINGCLIST)) { MIRANDASYSTRAYNOTIFY tn = { sizeof(tn) }; tn.tszInfoTitle = TranslateT("Typing notification"); tn.tszInfo = szTip; tn.dwInfoFlags = NIIF_INFO; tn.dwInfoFlags |= NIIF_INTERN_UNICODE; tn.uTimeout = 1000 * 4; CallService(MS_CLIST_SYSTRAY_NOTIFY, 0, (LPARAM)& tn); } else { CLISTEVENT cle = { sizeof(cle) }; cle.hContact = hContact; cle.hDbEvent = 1; cle.flags = CLEF_ONLYAFEW | CLEF_TCHAR; cle.hIcon = Skin_LoadIcon(SKINICON_OTHER_TYPING); cle.pszService = "SRMsg/ReadMessage"; cle.ptszTooltip = szTip; CallServiceSync(MS_CLIST_REMOVEEVENT, hContact, 1); CallServiceSync(MS_CLIST_ADDEVENT, hContact, (LPARAM)&cle); IcoLib_ReleaseIcon(cle.hIcon); } } return 0; }
static int AwayMsgPreBuildMenu(WPARAM hContact, LPARAM lParam) { TCHAR str[128]; char *szProto = GetContactProto(hContact); int iHidden = szProto ? db_get_b(hContact, szProto, "ChatRoom", 0) : 0; int iStatus; if (!iHidden) { iHidden = 1; iStatus = db_get_w(hContact, szProto, "Status", ID_STATUS_OFFLINE); if (CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGRECV) { if (CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_3, 0) & Proto_Status2Flag(iStatus == ID_STATUS_OFFLINE ? ID_STATUS_INVISIBLE : iStatus)) { iHidden = 0; HICON hIcon = Skin_LoadProtoIcon(szProto, iStatus); mir_sntprintf(str, _countof(str), TranslateT("Re&ad %s message"), pcli->pfnGetStatusModeDescription(iStatus, 0)); Menu_ModifyItem(hAwayMsgMenuItem, str, hIcon, 0); IcoLib_ReleaseIcon(hIcon); } } } else Menu_ShowItem(hAwayMsgMenuItem, false); ptrA szMsg(db_get_sa(hContact, "CList", "StatusMsg")); if (!iHidden && szMsg != NULL) { mir_sntprintf(str, _countof(str), TranslateT("Copy %s message"), pcli->pfnGetStatusModeDescription(iStatus, 0)); Menu_ModifyItem(hCopyMsgMenuItem, str); } else Menu_ShowItem(hCopyMsgMenuItem, false); if (!iHidden && szMsg != NULL && StrFindURL(szMsg) != NULL) { mir_sntprintf(str, _countof(str), TranslateT("&Go to URL in %s message"), pcli->pfnGetStatusModeDescription(iStatus, 0)); Menu_ModifyItem(hGoToURLMenuItem, str); } else Menu_ShowItem(hGoToURLMenuItem, false); return 0; }
static int IconsChanged(WPARAM, LPARAM) { StatusIconData sid = { sizeof(sid) }; sid.szModule = MODULE_NAME; sid.hIconDisabled = IcoLib_GetIcon("spellchecker_disabled"); sid.flags = MBF_HIDDEN | MBF_TCHAR; for (int i = 0; i < languages.getCount(); i++) { sid.dwId = i; TCHAR tmp[128]; mir_sntprintf(tmp, _T("%s - %s"), TranslateT("Spell Checker"), languages[i]->full_name); sid.tszTooltip = tmp; HICON hIcon = (opts.use_flags) ? IcoLib_GetIconByHandle(languages[i]->hIcolib) : IcoLib_GetIcon("spellchecker_enabled"); sid.hIcon = CopyIcon(hIcon); IcoLib_ReleaseIcon(hIcon); Srmm_ModifyIcon(NULL, &sid); } return 0; }
extern "C" __declspec(dllexport) int Unload(void) { CloseNotesList(); CloseReminderList(); SaveNotes(); SaveReminders(); DestroyMsgWindow(); WS_CleanUp(); TermSettings(); UnhookEvent(hkFontChange); UnhookEvent(hkColorChange); UnhookEvent(hkOptInit); IcoLib_ReleaseIcon(g_hReminderIcon); DeleteObject(hBodyFont); DeleteObject(hCaptionFont); if (hRichedDll) FreeLibrary(hRichedDll); return 0; }
INT_PTR CSteamProto::OnRequestAdvStatusIconIdx(WPARAM wParam, LPARAM) { int status = GetContactXStatus(wParam); if (status) { if (std::find(xstatusIconsValid.begin(), xstatusIconsValid.end(), status) == xstatusIconsValid.end()) { // adding/updating icon HIMAGELIST clistImageList = (HIMAGELIST)CallService(MS_CLIST_GETICONSIMAGELIST, 0, 0); if (clistImageList) { HICON hXStatusIcon = GetXStatusIcon(status, LR_SHARED); std::map<int, int>::iterator it = xstatusIcons.find(status); if (it != xstatusIcons.end() && it->second > 0) ImageList_ReplaceIcon(clistImageList, it->first, hXStatusIcon); else xstatusIcons.insert(std::make_pair(status, ImageList_AddIcon(clistImageList, hXStatusIcon))); // mark icon index in the array as valid xstatusIconsValid.push_back(status); IcoLib_ReleaseIcon(hXStatusIcon); } } if (std::find(xstatusIconsValid.begin(), xstatusIconsValid.end(), status) != xstatusIconsValid.end()) { std::map<int, int>::iterator it = xstatusIcons.find(status); if (it != xstatusIcons.end()) return ((INT_PTR) it->second & 0xFFFF) << 16; } } return -1; }
void ReleaseIcolibIcon(HICON hIcon) { IcoLib_ReleaseIcon(hIcon); }