编程笔记

lifelong learning & practice makes perfect

CImageList-CBitmap-Usage

​ CImageList创建:读取图像,创建CImageList对象,将图像添加到对象中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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("上料状态显示控件,添加位图失败","错误");
}

参考文档

  • 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时指定了透明色也不起作用。

欢迎关注我的其它发布渠道