天天看点

CImageList-CBitmap-Usage

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

继续阅读