Article ID: 186151
Article Last Modified on 7/11/2005
//Define this as whatever RGB value you used for your transparent color.
#define TRANSPARENT_COLOR (RGB(192, 192, 192))
LRESULT lResult = 0;
HIMAGELIST himlHot,
himlNormal;
//Get the Internet Explorer toolbar's hot image list.
m_pShellBrowser->SendControlMsg( FCW_TOOLBAR,
TB_GETHOTIMAGELIST,
0,
0,
(LRESULT*)&himlHot);
//Get the Internet Explorer toolbar's normal image list.
m_pShellBrowser->SendControlMsg( FCW_TOOLBAR,
TB_GETIMAGELIST,
0,
0,
(LRESULT*)&himlNormal);
if(himlNormal && himlHot)
{
HIMAGELIST himlAddNorm,
himlAddHot;
//Create an image list from your normal images.
himlAddNorm = ImageList_LoadImage( g_hInst,
MAKEINTRESOURCE(IDB_TOOLS_NORM),
16,
0,
TRANSPARENT_COLOR,
IMAGE_BITMAP,
LR_DEFAULTCOLOR);
if(himlAddNorm)
{
//Merge the normal images.
lResult = ResizeAndMergeImages( himlNormal,
himlAddNorm,
TRANSPARENT_COLOR);
ImageList_Destroy(himlAddNorm);
}
//Create an image list from your hot images.
himlAddHot = ImageList_LoadImage( g_hInst,
MAKEINTRESOURCE(IDB_TOOLS_HOT),
16,
0,
TRANSPARENT_COLOR,
IMAGE_BITMAP,
LR_DEFAULTCOLOR);
if(himlAddHot)
{
//Merge the hot images.
ResizeAndMergeImages(himlHot, himlAddHot, TRANSPARENT_COLOR);
ImageList_Destroy(himlAddHot);
}
}
else
{
TBADDBITMAP tbab;
tbab.hInst = g_hInst;
tbab.nID = (int)IDB_TOOLS_NORM;
m_pShellBrowser->SendControlMsg( FCW_TOOLBAR,
TB_ADDBITMAP,
2,
(LPARAM)&tbab,
&lResult);
}
/*********************************************************************
ResizeAndMergeImages()
*********************************************************************/
int ResizeAndMergeImages( HIMAGELIST himlDest,
HIMAGELIST himlSrc,
COLORREF clrTransparent)
{
int nReturn = -1;
int cxDest,
cyDest,
cxSrc,
cySrc,
nImages;
HDC hdcScreen;
ImageList_GetIconSize(himlDest, &cxDest, &cyDest);
ImageList_GetIconSize(himlSrc, &cxSrc, &cySrc);
nImages = ImageList_GetImageCount(himlSrc);
hdcScreen = GetDC(NULL);
if(hdcScreen)
{
HDC hdc;
hdc = CreateCompatibleDC(hdcScreen);
if(hdc)
{
RECT rc;
HBITMAP hbm;
rc.left = 0;
rc.top = 0;
rc.right = cxDest;
rc.bottom = cyDest;
hbm = CreateCompatibleBitmap(hdcScreen, rc.right, rc.bottom);
if(hbm)
{
HBRUSH hbr;
hbr = CreateSolidBrush(clrTransparent);
if(hbr)
{
int i,
dx,
dy;
dx = (cxDest/2) - (cxSrc/2);
dy = (cyDest/2) - (cySrc/2);
//draw each image into the destination
for(i = 0; i < nImages; i++)
{
HBITMAP hbmTemp;
int n;
hbmTemp = (HBITMAP)SelectObject(hdc, hbm);
//fill the image with the transparent color
FillRect(hdc, &rc, hbr);
ImageList_Draw( himlSrc,
i,
hdc,
dx,
dy,
ILD_NORMAL);
SelectObject(hdc, hbmTemp);
n = ImageList_AddMasked(himlDest, hbm, clrTransparent);
if(-1 == nReturn)
nReturn = n;
}
DeleteObject(hbr);
}
}
DeleteDC(hdc);
}
ReleaseDC(NULL, hdcScreen);
}
return nReturn;
}
Keywords: kbhowto kbextension kbnamespace KB186151