树视图控件中的每个项目都可以有两个与之相关联的图像。一个项目在选择时显示一个图像,另一个在不显示时显示。要包含具有树视图项目的图像,您必须使用图像列表功能来创建图像列表并向其添加图像。然后,您必须使用TVM_SETIMAGELIST消息将图像列表与树视图控件相关联。
以下示例创建一个图像列表,向列表中添加三个位图,并将图像列表与树视图控件相关联。
// InitTreeViewImageLists - 创建一个图像列表,向它添加三个位图,并将图像列表与树视图控件相关联。
//如果成功返回TRUE,否则返回FALSE。
// hwndTV - 树视图控件的句柄
//
//全局变量和常量
// g_nOpen,g_nClosed和g_nDocument - 的整数变量
//图像的索引
// CX_BITMAP和CY_BITMAP - 图标的宽度和高度
// NUM_BITMAPS - 要添加到图像列表的位图数
BOOL InitTreeViewImageLists(HWND hwndTV)
{
HIMAGELIST himl; //图片列表处理
HBITMAP hbmp; //处理位图
//创建图像列表。
if ((himl = ImageList_Create(CX_BITMAP, CY_BITMAP,
FALSE, NUM_BITMAPS, 0)) == NULL)
return FALSE;
//添加打开的文件,关闭文件和文档位图。
hbmp = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_OPEN_FILE));
g_nOpen = ImageList_Add(himl, hbmp, (HBITMAP) NULL);
DeleteObject(hbmp);
hbmp = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_CLOSED_FILE));
g_nClosed = ImageList_Add(himl, hbmp, (HBITMAP) NULL);
DeleteObject(hbmp);
hbmp = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_DOCUMENT));
g_nDocument = ImageList_Add(himl, hbmp, (HBITMAP) NULL);
DeleteObject(hbmp);
//如果不是全部图像都被添加,则失败。
if(ImageList_GetImageCount(himl)< 3)
return FALSE;
//将图像列表与树视图控件关联。
TreeView_SetImageList(hwndTV, himl, TVSIL_NORMAL);
return TRUE;
}