//____________________________________________________________________________ // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1995 - 1996. // // File: icon.cxx // // Contents: // // Classes: // // Functions: // // History: 4/5/1996 RaviR Created // //____________________________________________________________________________ #include "..\pch\headers.hxx" #pragma hdrstop #include "dbg.h" #include "macros.h" #include "..\inc\resource.h" #include "resource.h" #include "jobicons.hxx" extern HINSTANCE g_hInstance; CJobIcon::CJobIcon(void) { m_himlSmall = NULL; // init so that if creation of m_himlLarge fails, // the destrucor will not fault. // // Large // int cx = GetSystemMetrics(SM_CXICON); int cy = GetSystemMetrics(SM_CYICON); m_himlLarge = ImageList_Create(cx, cy, TRUE, 1, 1); if (m_himlLarge == NULL) { DEBUG_OUT((DEB_ERROR, "ImageList_Create(large) returned NULL.\n")); return; } HBITMAP hBmp = LoadBitmap(g_hInstance, MAKEINTRESOURCE(BMP_JOBSTATEL)); if (hBmp == NULL) { DEBUG_OUT((DEB_ERROR, "LoadBitmap(state-large) returned NULL.\n")); return; } int i = ImageList_AddMasked(m_himlLarge, hBmp, RGB(0, 255, 0)); if (i != 0) { DEBUG_OUT((DEB_ERROR, "ImageList_AddMasked returned <%d> expected 0.\n", i)); } DeleteObject(hBmp); // // Small // cx = GetSystemMetrics(SM_CXSMICON); cy = GetSystemMetrics(SM_CYSMICON); m_himlSmall = ImageList_Create(cx, cy, TRUE, 1, 1); if (m_himlSmall == NULL) { DEBUG_OUT((DEB_ERROR, "ImageList_Create(small) returned NULL.\n")); return; } hBmp = LoadBitmap(g_hInstance, MAKEINTRESOURCE(BMP_JOBSTATES)); if (hBmp == NULL) { DEBUG_OUT((DEB_ERROR, "LoadBitmap(state-small) returned NULL.\n")); return; } i = ImageList_AddMasked(m_himlSmall, hBmp, RGB(0, 255, 0)); if (i != 0) { DEBUG_OUT((DEB_ERROR, "ImageList_AddMasked returned <%d> expected 0.\n", i)); } DeleteObject(hBmp); } HICON GetDefaultAppIcon( BOOL fLarge) { TRACE_FUNCTION(GetDefaultAppIcon); HICON hicon = 0; int cx = GetSystemMetrics(fLarge ? SM_CXICON : SM_CXSMICON); int cy = GetSystemMetrics(fLarge ? SM_CYICON : SM_CYSMICON); hicon = (HICON)LoadImage(g_hInstance, (LPCTSTR)IDI_GENERIC, IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR); return hicon; } void CJobIcon::GetIcons( LPCTSTR pszApp, BOOL fEnabled, HICON * phiconLarge, HICON * phiconSmall) { TRACE(CJobIcon, GetIcons); UINT count; if (pszApp != NULL && *pszApp != TEXT('\0')) { count = ExtractIconEx(pszApp, 0, phiconLarge, phiconSmall, 1); } _OverlayIcons(phiconLarge, phiconSmall, fEnabled); } //+-------------------------------------------------------------------------- // // Member: CJobIcon::GetTemplateIcons // // Synopsis: Fill out pointers with large and small template icons // // Arguments: [phiconLarge] - NULL or ptr to icon handle to fill // [phiconSmall] - ditto // // History: 5-15-1997 DavidMun Created // //--------------------------------------------------------------------------- void CJobIcon::GetTemplateIcons( HICON * phiconLarge, HICON * phiconSmall) { TRACE(CJobIcon, GetTemplateIcons); if (phiconLarge) { int cx = GetSystemMetrics(SM_CXICON); int cy = GetSystemMetrics(SM_CYICON); *phiconLarge = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_TEMPLATE), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR); if (!*phiconLarge) { DEBUG_OUT_LASTERROR; } } if (phiconSmall) { int cx = GetSystemMetrics(SM_CXSMICON); int cy = GetSystemMetrics(SM_CYSMICON); *phiconSmall = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_TEMPLATE), IMAGE_ICON, cx, cy, LR_DEFAULTCOLOR); if (!*phiconSmall) { DEBUG_OUT_LASTERROR; } } } void CJobIcon::_OverlayIcons( HICON * phiconLarge, HICON * phiconSmall, BOOL fEnabled) { HICON hiconTemp; if (phiconLarge != NULL) { if (*phiconLarge == NULL) { *phiconLarge = GetDefaultAppIcon(TRUE); } hiconTemp = OverlayStateIcon(*phiconLarge, fEnabled); DestroyIcon(*phiconLarge); *phiconLarge = hiconTemp; } if (phiconSmall != NULL) { if (*phiconSmall == NULL) { *phiconSmall = GetDefaultAppIcon(FALSE); } hiconTemp = OverlayStateIcon(*phiconSmall, fEnabled, FALSE); DestroyIcon(*phiconSmall); *phiconSmall = hiconTemp; } } HICON CJobIcon::OverlayStateIcon( HICON hicon, BOOL fEnabled, BOOL fLarge) { TRACE(CJobIcon, OverlayStateIcon); HICON hiconOut; // dont destroy rhiml !! HIMAGELIST &rhiml = (fLarge == TRUE) ? m_himlLarge : m_himlSmall; int i = ImageList_AddIcon(rhiml, hicon); HIMAGELIST himlNew = ImageList_Merge(rhiml, i, rhiml, (fEnabled ? 0 : 1), 0, 0); ImageList_Remove(rhiml, i); hiconOut = ImageList_GetIcon(himlNew, 0, 0); if (himlNew != NULL) { ImageList_Destroy(himlNew); } return hiconOut; }