title: CImageList-CBitmap-Usage
date: 2020-04-03 23:27:00
tags:
- MFC
- C++
CImageList创建:读取图像,创建CImageList对象,将图像添加到对象中。
bool bIsOK=true;
int iRtn=TRUE;
CBitmap bmp1,bmp2,bmp3;
CImageList m_ImageList;
iRtn =bmp1.LoadBitmap (IDB_BITMAP_BIRD);//加载位图多次加载可能失败,注意判断返回值:返回值(Nonzero if successful; otherwise 0)
bIsOK=iRtn?true:false;
iRtn =bmp2.LoadBitmap (IDB_BITMAP_DOG);
bIsOK=iRtn?true:false;
iRtn =bmp3.LoadBitmap (IDB_BITMAP_CAT);
bIsOK=iRtn?true:false;
m_ImageList.Create (16, 16, ILC_MASK | ILC_COLOR24, 0,4);
iRtn =m_ImageList.Add (&bmp1, RGB (192, 192, 192));//Add返回值(Zero-based index of the first new image if successful; otherwise - 1,第i张添加成功返回i,从0开始)
iRtn =m_ImageList.Add (&bmp2, RGB (192, 192, 192));
iRtn =m_ImageList.Add (&bmp3, RGB (192, 192, 192));
int iNum=m_ImageList.GetImageCount();
bIsOK =(iNum==(iRtn+1))?true:false;
if (!bIsOK)
{
ShowMyMsgBox("上料状态显示控件,添加位图失败","错误");
}
参考文档
- bitmap
- CImageList
- CSDN论坛
用了ILC_MASK后,可以这样做:
m_ImageList.Create(15,15,ILC_COLOR24|ILC_MASK,3,2);
CBitmap bmp1;
bmp1.LoadBitmap(IDB_COMOFF);
m_ImageList.Add(&bmp1,RGB(255,255,255));
最后一个参数就是指透明的颜色,表示显示时需要将图片IDB_COMOFF的所有白色透明掉。否则就会有白色底的。每个图片都是长方形的,你的图标整个长方形区域都作为有效内容了,自然没有透明的必要。但是,很多图标只是长方形中的某一部分是有意义的,其它都是背景色。将背景色透明是最好的显示效果。因此这个ILC_MASK就帮助你实现它。否则即使Add时指定了透明色也不起作用。