方式1:
int AddImageList(HBITMAP hBitmap)
{
if (hBitmap == NULL)
return -1;
BITMAP bmpObj;
::GetObject(hBitmap, sizeof(BITMAP), (LPVOID)&bmpObj);
UINT nFlags = ILC_MASK;
switch (bmpObj.bmBitsPixel)
{
case 4:
default:
nFlags |= ILC_COLOR4;
break;
case 8:
nFlags |= ILC_COLOR8;
break;
case 16:
nFlags |= ILC_COLOR16;
break;
case 24:
nFlags |= ILC_COLOR24;
break;
case 32:
nFlags |= ILC_COLOR32;
break;
}
if (m_ImageList.GetSafeHandle() == NULL)
m_ImageList.Create(bmpObj.bmWidth, bmpObj.bmHeight, nFlags, 0, 0);
HBITMAP hbmpCopy = (HBITMAP) ::CopyImage(hBitmap, IMAGE_BITMAP, 0, 0, 0);
int nRet = m_ImageList.Add(CBitmap::FromHandle(hbmpCopy), RGB(0, 0, 0));
::DeleteObject(hbmpCopy);
return nRet;
}
方式2:
int AddImageList(HICON hIcon)
{
if (hIcon == NULL)
return -1;
ICONINFO icoObj;
::GetIconInfo(hIcon, &icoObj);
BITMAP bmpObj;
::GetObject(icoObj.hbmColor, sizeof(BITMAP), (LPVOID)&bmpObj);
m_szImage = CSize(bmpObj.bmWidth, bmpObj.bmHeight);
::DeleteObject(icoObj.hbmColor);
::DeleteObject(icoObj.hbmMask);
UINT nFlags = ILC_MASK;
switch (bmpObj.bmBitsPixel)
{
case 4:
default:
nFlags |= ILC_COLOR4;
break;
case 8:
nFlags |= ILC_COLOR8;
break;
case 16:
nFlags |= ILC_COLOR16;
break;
case 24:
nFlags |= ILC_COLOR24;
break;
case 32:
nFlags |= ILC_COLOR32;
break;
}
if (m_ImageList.GetSafeHandle() == NULL)
m_ImageList.Create(bmpObj.bmWidth, bmpObj.bmHeight, nFlags, 0, 0);
int nRet = m_ImageList.Add(hIcon);
return nRet;
}
方法3:
int AddImageList(UINT uiBmpResId)
{
if (uiBmpResId == 0)
return -1;
CMFCToolBarImages images;
if (!images.Load(uiBmpResId))
{
ASSERT(FALSE);
return -1;
}
HBITMAP hBitmap = (HBITMAP) ::CopyImage(images.GetImageWell(), IMAGE_BITMAP, 0, 0, 0);
int nRet = AddImageList(hBitmap);
::DeleteObject(hBitmap);
return nRet;
}