// 1.create treeview DWORD dwStryle = WS_VISIBLE | WS_CHILD | TVS_HASLINES|TVS_SHOWSELALWAYS/*|TVS_LINESATROOT*/;// remove root-line style HWND hTree = CreateWindow(WC_TREEVIEW,L"",dwStryle,0,0,0,0,hParent,(HMENU)IDC_CS_TREE,hInst,NULL); // 2. create Imagelist HIMAGELIST hi; hi = ImageList_Create(24,24,ILC_COLOR24|ILC_MASK,1,3); // 创建像素为24*24 颜色深度为多彩24,因为图片不透明所以使用mask,初始化1,最大3 HBITMAP hBmp = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BMP_TREE)); // 载入bitmap图片 ImageList_AddMasked(hi,hBmp,RGB(0,0,0)); // 将图片加入imagelist中 (我在添加中发现了一个问题,当时我的图片是23*24的结果就是天不上,将图片修改为24*24就OK了 int iImageCount = ImageList_GetImageCount(hi); // 可以获取到列表图片个数,添加完后可以比较下结果 // 3. set imagelist to tree TreeView_SetImageList(hTree,hi,TVSIL_NORMAL); // 4. insert item TVINSERTSTRUCT ti= { 0}; ti.item.mask=TVIF_TEXT|TCIF_IMAGE|TVIF_SELECTEDIMAGE; ti.hParent=NULL; ti.hInsertAfter=TVI_ROOT; ti.item.iSelectedImage= ti.item.iImage=0; ti.item.pszText=L"test";
以上就是创建过程。
消息处理,其中要处理WM_NOTIFY消息
LRESULT cs_OnNotify(HWND hwnd,int idfrm,NMHDR* pnmhdr){ if (idfrm == IDC_CS_TREE) { if ( pnmhdr->code == TVN_SELCHANGED ) { WCHAR szText[MAX_PATH]; HTREEITEM hSelected ; TVITEM tvi = { 0}; tvi.mask = TVIF_TEXT; tvi.pszText = szText; tvi.cchTextMax = MAX_PATH; hSelected = TreeView_GetNextItem(hTree,hSelected,TVGN_CARET); tvi.hItem = hSelected; TreeView_GetItem(hTree,&tvi); SetWindowText(hwnd,szText); } } return FALSE ;}
以上是我用到的选择某Item时,获取text并将窗体text改变。
可以根据相像自己改动下