win32 treeview

    // 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改变。

可以根据相像自己改动下

posted @ 2016-05-20 13:46  m4sterx  阅读(722)  评论(0编辑  收藏  举报