天天看點

C++ 控件之 CImageList

圖像清單控制(CImageList)是相同大小圖像的一個集合,每個集合中均以0為圖像的索引序号基數,圖像清單通常由大圖示或位圖構成,其中包含透明位圖模式。可以利用WINDOWS32位應用程式接口函數API來繪制、建立和删除圖像,并能實作增加、删除、替換和拖動圖像等操作。圖像清單控制提供了控制圖像清單的基本方法,這些方法在WINDOWS95及以後版本才能實作。 (一)圖像控制的對象結構 1、圖像控制的資料成員 m_hImageList 連接配接圖像對象的控制句柄 2、圖像控制的建立方法 CimageList&imageList建立圖像控制對象結構 Create 初始化圖像清單并綁定對象 圖像控制的建立方法如下: BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow ); BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask ); BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREF crMask ); BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2 ,int nImage2,int dx, int dy ); 其中各項參數的含義為:cx定義圖像的寬度,機關為象素;cy定義圖象的高度,機關為象素; nFlags确定建立圖像清單的類型,可以是以下值的組合:ILC_COLOR、ILC_COLOR4、ILC_COLOR8、ILC_COLOR16、 ILC_COLOR24、ILC_COLOR32、ILC_COLORDDB和ILC_MASK;nInitial用來确定圖像清單包含的圖像數量; nGrow用來确定圖像清單可控制的圖像數量。 NbitmapID 用來确定圖像清單聯系的位圖示志值;crMask表示顔色屏蔽位; LpszBitmapID 用來确定包含位圖資源的辨別串; imagelist1 指向圖像清單控制對象的一個指針;nImage1圖像清單1中包含的圖像數 量;imagelist2指向圖像清單控制對象的一個指針;nImage2圖像清單2中包含的圖像數量;dx表示以象素為機關的圖像寬度;dy表示以象素為機關的圖像高度。 同樣,圖像控制的建立也包括兩個步驟,首先建立圖像清單結構,然後建立圖像清單控制。 3、圖像控制的屬性類 圖像控制的屬性類包括傳回m_hImageList.控制句柄GetSafeHandle、取得圖像清單中的圖像數量GetImageCount、設定圖像清單的背景顔色SetBkColor、取得圖像清單的背景顔色SetBkColor和取得圖像的有關資訊SetBkColor。 4、圖像控制的操作方法 圖像控制的操作方法包括将一個圖像清單綁定到一個對象上Attach、将對象上的圖像清單解除綁定并傳回句柄Detach、删除一個圖像清單DeleteImageList、将一個圖像增加到圖像清單中Add和将一個圖像從圖像清單中删除Remove等。 (二)圖像控制的應用技巧 對于圖像控制,同樣不能單獨使用,必須與清單控制、樹控制和标簽控制互相結合應用,下面分别介紹其具體應用技巧。 1、圖像控制在清單控制中的應用技巧 ①設定圖像控制CListCtrl::SetImageList的調用格式如下: CImageList* SetImageList( CImageList* pImageList, int nImageList ); 其傳回值是指向前一個圖像清單控制的一個指針,如果不存在前一個圖像清單則為NULL;其中參數pImageList是指向圖像清單的辨別,nImageList是圖像清單的類型,可以是如下值: LVSIL_NORMAL 用大圖示方式進行圖像清單; LVSIL_SMALL 用小圖示方式進行圖像清單; LVSIL_STATE 以圖像狀态進行圖像清單; ②取得圖像控制CListCtrl::GetImageList的調用格式如下: CImageList* GetImageList( int nImageList ) const; 其傳回值為指向圖像清單控制的指針,其中nImageList用來确定取得傳回值的圖像清單的 值,其取值與設定圖像清單函數相同。 ③圖像控制在清單控制中的應用示例 CImageList Cil1,Cil2; //定義大小圖示像清單 CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//取得清單控制程式 Cil1.Create(32,32,TRUE,2,2); //建立32位圖像控制 Cil1.Add(pApp->LoadIcon(IDI_GJ));//增加選中狀态圖像 Cil1.Add(pApp->LoadIcon(IDI_XS));//增加非選中狀态圖像 Cil2.Create(16,16,TRUE,2,2); //建立16位圖像控制 Cil2.Add(pApp->LoadIcon(IDI_GJ));//增加選中狀态圖像 Cil2.Add(pApp->LoadIcon(IDI_XS));//增加非選中狀态圖像 m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);//設定大圖示控制 m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//設定小圖示控制 2、圖像控制在樹控制中的應用技巧 ①設定圖像控制CTreeCtrl::SetImageList的調用格式如下: CImageList* SetImageList( CImageList * pImageList, int nImageListType ); 其傳回值為指向前前一個圖像清單的指針,否則為NULL;參數pImageList為指向圖像清單的辨別,如果pImageList為NULL則所有的圖像都将從樹控制中被清除;nImageListType為圖像清單設定的類型,可以是如下值之一: TVSIL_NORMAL 設定正常圖像清單,其中包括選中和非選中兩種圖示; TVSIL_STATE 設定圖像清單狀态,指使用者自定義狀态; ②取得圖像控制CTreeCtrl::GetImageList的調用格式如下: CImageList* GetImageList( UINT nImage ); 如果調用成功則傳回圖像清單控制指針,否則為NULL;nImage為取得傳回值的圖像清單類型,其取值和取得圖像清單控制完全相同。 ③圖像控制在樹控制中的應用示例 CImageList Cil1,Cil2;//定義大小圖示像清單 CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp();//擷取應用程式指針 Cil1.Create(16,16,ILC_COLOR,2,2);//建立圖像控制 Cil1.Add(pApp->LoadIcon(IDI_PM));//增加選中狀态圖像 Cil1.Add(pApp->LoadIcon(IDI_CJ));//增加非選中狀态圖像 m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL);//設定圖像控制清單 然後在樹控制的結構定義中進行如下設定: TCItem.item.iImage=0; //設定未選中圖像索引号 TCItem.item.iSelectedImage=1;//設定選中時圖像引号 3、圖像控制在标簽控制中的應用技巧 ①設定圖像控制CTabCtrl::SetImageList的調用格式 CImageList * SetImageList( CImageList * pImageList ); 其傳回值為指向前一個圖像清單的指針,如果不存在前一個圖像清單則為NULL;pImageList為辨別TAB控制的圖像清單指針。 ②取得圖像控制CTabCtrl::GetImageList的調用格式 HIMAGELIST GetImageList() const; 其傳回值為指向TAB控制的圖像清單指針,如果調用不成功則為NULL。 其應用技巧較前兩種更加簡單,這裡不再贅述。