在MFC中CImageList類封裝了圖像清單控件的功能,圖像清單是一個具有相同大小的圖像(可以是不同類型)的集合,其主要用于應用程式中大規模圖示的存儲。該控件是不可見的,通常與其它如CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl一起使用,為他們提供圖示資源。
圖象的每個集合中均以0為圖象索引基數,可以把這些圖示看成是以數組方式存儲的,圖像清單通常由大圖示或位圖構成,其中包含位圖模式。實際上,所有的在同一個圖象清單中的圖示都被存儲在一個螢幕裝置的位圖中。
2.添加圖像的兩種方法
通常可以向CImageList對象中添加位圖和圖示資源。其資源可以是程式中資源檔案中的資源,也可以直接從外部檔案調入。
(1)從程式中資源檔案中添加圖示和位圖圖像如下所示(通常這是最為簡單直覺的方法):
// 建立一個CImageList類的指針變量
CImageList* pImageList;
pImageList = new CImageList();
pImageList->Create(32, 32, ILC_COLOR32, 0, 4); // 必不可少
// 添加圖示,圖示可以随圖像清單大小自動拉伸
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON1));
pImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));
// 添加位圖,并使黑色為透明色,如果圖像清單大小和位圖大小不一緻可能會導緻天添加失敗
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1)
pImageList->Add(&bmp, RGB(0, 0, 0));
bmp.DeleteObject();
bmp.LoadBitmap(IDB_BITMAP2)
(2)從外部檔案中添加圖示和位圖圖像代碼如下所示(這種方法可以是可執行程式更小,便于發行)
HBITMAP hBitmap;
CBitmap *pBitmap;
CString FilePathName = "e:\TIME.bmp";
pBitmap = new CBitmap;
//從檔案導入位圖
HBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
pBitmap->Attach(hBitmap);
m_pImageList->Add(pBitmap, RGB(0,0,0));
這樣一個圖像清單控件就建立好了,并且已經添加了圖像,接下來就可以在其它控件中使用其中的圖像。通常需要調用SetImageList(m_pImageList)将目前圖像清單設定為引用圖像源