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("上料狀態顯示控件,添加位圖失敗","錯誤");
}
參考文檔
-
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時指定了透明色也不起作用。