步驟一:創建圖像
添加一個包含全部圖標資源的位圖到資源編輯器。下面的列子,我們使用了一個13X13像素位圖資源,當然你也可以使用不同尺寸的位圖資源。
步驟二:為圖像列表添加變量
class CTreeCtrlX : public CTreeCtrl
{
// Construction
public:
CTreeCtrlX();
// Attributes
public:
CImageList m_imageState ;
:
:
:
}
步驟三:創建並設置圖像列表
調用Create()函數,用步驟一中給出的圖像ID與大小創建圖像列表,用SetImageList()函數設置圖像列表。過程如下:
m_tree.m_imageState.Create( IDB_STATE, 13, 1, RGB(255,255,255) );
m_tree.SetImageList( &(m_tree.m_imageState), TVSIL_STATE );
使用時我們在OnInitDialog()函數或OnInitialUpdate()函數中調用它。
步驟四:為每一個項目,指定狀態圖像
一旦為你的樹控制分配了圖像列表,當你插入項目到你的樹控制時,你可以為它指定狀態圖標SetItemState()函數可以達到上述目的。在此我們要使用INDEXTOSTATEIMAGEMASK( )宏,重新排序索引值。
// Using TV_INSERTSTRUCT
CString str = "xyzASDFqwerZCV";
TV_INSERTSTRUCT tv_is;
tv_is.hParent = parent ? parent : TVI_ROOT;
tv_is.hInsertAfter = TVI_LAST ;
tv_is.item.mask = TVIF_TEXT | TVIF_STATE;
tv_is.item.stateMask = TVIS_STATEIMAGEMASK;
tv_is.item.state = INDEXTOSTATEIMAGEMASK( 1 );
tv_is.item.pszText = str.GetBuffer(1);
tv_is.item.cchTextMax = str.GetLength();
hItem = InsertItem( &tv_is );
str.ReleaseBuffer();
// Using SetItemState
SetItemState( hItem, INDEXTOSTATEIMAGEMASK(1), TVIS_STATEIMAGEMASK );