百科名片圖像列表控制(CImageList)是相同大小圖像的一個(gè)集合,每個(gè)集合中均以0為圖像的索引序號基數,圖像列表通常由大圖標或位圖構成,其中包含透明位圖模式??梢岳肳INDOWS32位應用程序接口函數API來(lái)繪制、建立和刪除圖像,并能實(shí)現增加、刪除、替換和拖動(dòng)圖像等操作。圖像列表控制提供了控制圖像列表的基本方法,這些方法在WINDOWS95及以后版本才能實(shí)現。目錄圖像控制的對象結構MSDN中圖像控制的應用技巧展開(kāi)編輯本段圖像控制的對象結構數據成員 m_hImageList 連接圖像對象的控制句柄建立方法 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確定建立圖像列表的類(lèi)型,可以是以下值的組合: ILC_COLOR、ILC_COLOR4、ILC_COLOR8、ILC_COLOR16、ILC_COLOR24、ILC_COLOR32、 ILC_COLORDDB和ILC_MASK;nInitial用來(lái)確定圖像列表包含的圖像數量;nGrow用來(lái)確定圖像列表可控制的圖像數量。 NbitmapID 用來(lái)確定圖像列表聯(lián)系的位圖標志值;crMask表示顏色屏蔽位; LpszBitmapID 用來(lái)確定包含位圖資源的標識串; imagelist1 指向圖像列表控制對象的一個(gè)指針;nImage1圖像列表1中包含的圖像數量;imagelist2指向圖像列表控制對象的一個(gè)指針;nImage2圖像列表2中包含的圖像數量;dx表示以象素為單位的圖像寬度;dy表示以象素為單位的圖像高度。 同樣,圖像控制的建立也包括兩個(gè)步驟,首先建立圖像列表結構,然后建立圖像列表控制。屬性類(lèi) 圖像控制的屬性類(lèi)包括返回m_hImageList.控制句柄GetSafeHandle、取得圖像列表中的圖像數量GetImageCount、設置圖像列表的背景顏色SetBkColor、取得圖像列表的背景顏色GetBkColor和取得圖像的有關(guān)信息SetBkColor。操作方法 圖像控制的操作方法包括將一個(gè)圖像列表綁定到一個(gè)對象上Attach、將對象上的圖像列表解除綁定并返回句柄Detach、刪除一個(gè)圖像列表DeleteImageList、將一個(gè)圖像增加到圖像列表中Add和將一個(gè)圖像從圖像列表中刪除Remove等。編輯本段MSDN中 由于圖像列表不是窗口,它們本身并不是控件;但它們和幾種不同類(lèi)型的控件一起是以,包括列表控件(CListCtrl)、樹(shù)控件(CTreeCtrl)和選項卡控件(CTabCtrl)。圖像列表中的所有圖像包含在屏幕設備格式的單個(gè)寬位圖中。圖像列表也可能包括單色位圖,該位圖包含用于透明地繪制圖像(圖標樣式)的屏蔽。CImageList提供的成員函數使您得以繪制圖像,創(chuàng )建和銷(xiāo)毀圖像列表,添加和移除圖像,替換圖像,合并圖像,以及拖動(dòng)圖像。圖像列表的類(lèi)型 有兩種類(lèi)型的圖像列表(CImageList):非屏蔽的和屏蔽的。非屏蔽的圖像列表由包含一個(gè)或多個(gè)圖像的色位圖構成。屏蔽的圖像列表由相同大小的兩個(gè)位圖構成。第一個(gè)是包含圖像的色位圖,第二個(gè)是包含一系列屏蔽的單色位圖(一個(gè)屏蔽對應第一個(gè)位圖中的一個(gè)圖像)。 Create成員函數的一個(gè)重載曹永一個(gè)標志指示圖像列表是否是屏蔽的。(其他重載創(chuàng )建屏蔽的圖像列表)。 繪制非屏蔽圖像時(shí),只是簡(jiǎn)單地將其復制到目標DC。繪制屏蔽圖像時(shí),圖像位和屏蔽位組合,一般在位圖中產(chǎn)生顯露目標DC背景色的透明區域。繪制屏蔽圖像時(shí)可以指定幾種繪圖樣式。例如,可以指定圖像進(jìn)行抖色處理以指示選定的對象。使用圖像列表 構造CImageList對象,調用其Create函數的一個(gè)重載來(lái)創(chuàng )建圖像列表并將圖像列表附加到CImageList對象; 如果在創(chuàng )建圖像列表時(shí)沒(méi)有添加圖像,則調用Add或Read成員函數向圖像列表添加圖像; 通過(guò)調用控件的適當成員函數,將圖像列表與此控件相關(guān)聯(lián),或者您自己使用圖像列表的Draw成員函數繪制圖像列表中的圖像; 或許允許用戶(hù)是以圖像列表的內置拖動(dòng)支持拖動(dòng)圖像。 注意:如果圖像列表是用new運算符創(chuàng )建的,則在操作完CImageList對象后必須銷(xiāo)毀它。操作圖像列表 Replace成員函數用新的圖像替換圖像列表(CImageList)中的圖像。如果需要動(dòng)態(tài)增加圖像列表中的圖像數,該函數也有用。SetImageCount函數動(dòng)態(tài)更改存儲在圖像列表中的圖像數。如果增加圖像列表的大小,請調用Replace向新圖像增加圖像。如果減少圖像列表的大小,則釋放超過(guò)新大小的圖像。 Remove成員函數移除圖像列表中的圖像。Copy成員函數可以在圖像列表內復制或交換圖像。該函數使您得以指示是否應將源圖像復制到目標索引,還是應交換源圖像和目標圖像。 若要通過(guò)合并兩個(gè)圖像列表來(lái)創(chuàng )建新的圖像列表,請使用Create成員函數的適當重載。該Create重載合并現有的圖像列表的第一個(gè)圖像,并將所得的圖像存儲在新的圖像列表對象中。通過(guò)在第一個(gè)圖像上透明地繪制第二個(gè)圖像來(lái)創(chuàng )建新圖像。新圖像的屏蔽是對兩個(gè)現有圖像的屏蔽位執行邏輯OR元算的結果。 該操作一直重復到所有圖像都合并并添加到新的圖像列表中。 可以調用Write成員函數將圖像信息寫(xiě)入存檔,并通過(guò)調用Read成員函數讀回。 GetSafeHandle、Attach和Detach成員函數使您得以操作附加到CImageList對象的圖像列表句柄,而DeleteImageList成員函數刪除圖像列表但不銷(xiāo)毀CImageList對象。繪制圖像列表中的圖像 若要繪制圖像,請使用CImageList::Draw成員函數。您將需要指定指向DC的指針,要繪制的圖像的索引,DC中繪制圖像的位置,以及一組指示繪圖樣式的標志。 指定ILD_TRANSPARENT樣式后,Draw是以一個(gè)兩步進(jìn)程來(lái)繪制屏蔽的圖像。[1]?編輯本段圖像控制的應用技巧 對于圖像控制,同樣不能單獨使用,必須與列表控制、樹(shù)控制和標簽控制相互結合應用,下面分別介紹其具體應用技巧。圖像控制在列表控制中的應用技巧 1.1 設置圖像控制CListCtrl::SetImageList的調用格式如下: CImageList* SetImageList( CImageList* pImageList, int nImageList ); 其返回值是指向前一個(gè)圖像列表控制的一個(gè)指針,如果不存在前一個(gè)圖像列表則為NULL;其中參數pImageList是指向圖像列表的標識,nImageList是圖像列表的類(lèi)型,可以是如下值: LVSIL_NORMAL 用大圖標方式進(jìn)行圖像列表; LVSIL_SMALL 用小圖標方式進(jìn)行圖像列表; LVSIL_STATE 以圖像狀態(tài)進(jìn)行圖像列表; 1.2 取得圖像控制CListCtrl::GetImageList的調用格式如下: CImageList* GetImageList( int nImageList ) const; 其返回值為指向圖像列表控制的指針,其中nImageList用來(lái)確定取得返回值的圖像列表的值,其取值與設置圖像列表函數相同。 ?、蹐D像控制在列表控制中的應用示例 CImageList Cil1,Cil2; //定義大小圖標像列表 CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//取得列表控制程序 Cil1.Create(32,32,TRUE,2,2);//建立32位圖像控制 Cil1.Add(pApp->LoadIcon(IDI_GJ));//增加選中狀態(tài)圖像 Cil1.Add(pApp->LoadIcon(IDI_XS));//增加非選中狀態(tài)圖像 Cil2.Create(16,16,TRUE,2,2); //建立16位圖像控制 Cil2.Add(pApp->LoadIcon(IDI_GJ));//增加選中狀態(tài)圖像 Cil2.Add(pApp->LoadIcon(IDI_XS));//增加非選中狀態(tài)圖像 m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);//設置大圖標控制 m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//設置小圖標控制圖像控制在樹(shù)控制中的應用技巧 2.1 設置圖像控制CTreeCtrl::SetImageList的調用格式如下: CImageList* SetImageList( CImageList * pImageList, int nImageListType ); 其返回值為指向前前一個(gè)圖像列表的指針,否則為NULL;參數pImageList為指向圖像列表的標識,如果pImageList為NULL則所有的圖像都將從樹(shù)控制中被清除;nImageListType為圖像列表設置的類(lèi)型,可以是如下值之一: TVSIL_NORMAL 設置正常圖像列表,其中包括選中和非選中兩種圖標; TVSIL_STATE 設置圖像列表狀態(tài),指用戶(hù)自定義狀態(tài); 2.2 取得圖像控制CTreeCtrl::GetImageList的調用格式如下: CImageList* GetImageList( UINT nImage ); 如果調用成功則返回圖像列表控制指針,否則為NULL;nImage為取得返回值的圖像列表類(lèi)型,其取值和取得圖像列表控制完全相同。 2.3 圖像控制在樹(shù)控制中的應用示例 CImageList Cil1,Cil2;//定義大小圖標像列表 CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp();//獲取應用程序指針 Cil1.Create(16,16,ILC_COLOR,2,2);//建立圖像控制 Cil1.Add(pApp->LoadIcon(IDI_PM));//增加選中狀態(tài)圖像 Cil1.Add(pApp->LoadIcon(IDI_CJ));//增加非選中狀態(tài)圖像 m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL);//設置圖像控制列表 然后在樹(shù)控制的結構定義中進(jìn)行如下設置: TCItem.item.iImage=0; //設置未選中圖像索引號 TCItem.item.iSelectedImage=1;//設置選中時(shí)圖像引號 3 圖像控制在控制中的應用技巧 1.設置圖像控制CTabCtrl::SetImageList的調用格式 CImageList * SetImageList( CImageList * pImageList ); 其返回值為指向前一個(gè)圖像列表的指針,如果不存在前一個(gè)圖像列表則為NULL;pImageList為標識TAB控制的圖像列表指針。 2 取得圖像控制CTabCtrl::GetImageList的調用格式 HIMAGELIST GetImageList() const; 其返回值為指向TAB控制的圖像列表指針,如果調用不成功則為NULL。 CImageList類(lèi)的成員 數據成員 m_hImageList包含附加給此對象關(guān)聯(lián)的圖象列表的句柄 構造函數 CImageList構造一個(gè)CImageList對象Create初始化一個(gè)圖象列表并把它附加給一個(gè)CImageList對象 屬性 GetSafeHandle獲取m_hImageListoperator HIMAGELIST返回附加給CImageList的HIMAGELISTFromHandle在給設備一個(gè)上下文的句柄時(shí),返回指向CImageList對象的指針。如果無(wú)CImageList對象附加給句柄,則臨時(shí)CImageList對象被創(chuàng )建和附加FromHandlePermanent在給圖象列表一個(gè)句柄時(shí),返回指向CImageList對象的指針。如果無(wú)CImageList對象附加給句柄,則返回NULLDeleteTempMap被CWinApp閑置處理程序調用,刪除一個(gè)由FromHandle創(chuàng )建的臨時(shí)CImageList對象GetImageCount獲取圖象列表中的圖象數SetBkColor設置圖象列表的背景色GetBkColor獲取圖象列表的當前背景色GetImageInfo獲取圖象信息 操作 Attach將一個(gè)圖象列表附加給一個(gè)CImageList對象Detach分離某圖象列表對象與某CImageList對象并返回圖象列表的句柄DeleteImageList刪除一個(gè)圖象列表SetImageCount重新設置圖象列表中的圖象數Add添加一個(gè)或多個(gè)圖象到圖象列表中Remove從圖象列表中移走一個(gè)圖象Replace用新圖象替代圖象列表中的圖象ExtractIcon構造一個(gè)基于某圖象的圖標的圖象列表或掩碼Draw繪制在某拖拉操作中正被拖動(dòng)的圖象SetOverlayImage添加一個(gè)圖象基于零的索引到將被用于覆蓋掩碼的圖象列表中Copy拷貝CimageList對象中的圖象DrawIndirect繪制圖象列表中的圖象SetDragCursorImage創(chuàng )建一個(gè)新的拖動(dòng)圖象GetDragImage取得用于拖動(dòng)的臨時(shí)圖象列表Read從歸檔文件中讀取圖象列表Write往歸檔文件中寫(xiě)圖象列表BeginDrag開(kāi)始拖動(dòng)圖象DragEnter在拖動(dòng)操作中封鎖更新并在確定位置顯示拖動(dòng)圖象EndDrag結束一個(gè)拖動(dòng)操作DragLeave解凍窗口并隱藏拖動(dòng)圖象,使窗口能被更新DragMove移動(dòng)正在拖放操作中被拖動(dòng)的圖象DragShowNolock在一個(gè)拖動(dòng)操作中顯示或隱藏拖動(dòng)圖象,不封鎖窗口
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。