天天看點

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

繼續閱讀