none
关于树控件的东东 RRS feed

  • 问题

  • 基于windows API的窗体程序

    我要为树控件动态的添加节点 需要 使用什么函数添加什么头文件

    拜托大神们指教指教!!!

    感激不尽

    2017年4月15日 18:11

答案

  • 如果是.NET,在工具箱中拖动一个TreeView控件到窗体中就可以了,不需要头文件。

    基于windows API的窗体程序,需要增加MFC控件支持,需要创建MFC应用程序。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    2017年4月17日 0:30

全部回复

  • 如果是.NET,在工具箱中拖动一个TreeView控件到窗体中就可以了,不需要头文件。

    基于windows API的窗体程序,需要增加MFC控件支持,需要创建MFC应用程序。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    2017年4月17日 0:30
  • Hi,

    感谢你在MSDN论坛发帖。

    如果你想使用windows API, 去添加节点,你需要发送 TVM_INSERTITEM 信息,这个结构体 TVITEM 定义了每个子节点的属性。 所以重点是构造TVITEM 结构体。  

    HTREEITEM AddItemToTree(HWND hwndTV, LPTSTR lpszItem, int nLevel)
    { 
        TVITEM tvi; 
        TVINSERTSTRUCT tvins; 
        static HTREEITEM hPrev = (HTREEITEM)TVI_FIRST; 
        static HTREEITEM hPrevRootItem = NULL; 
        static HTREEITEM hPrevLev2Item = NULL; 
        HTREEITEM hti; 
    
        tvi.mask = TVIF_TEXT | TVIF_IMAGE 
                   | TVIF_SELECTEDIMAGE | TVIF_PARAM; 
    
        // Set the text of the item. 
        tvi.pszText = lpszItem; 
        tvi.cchTextMax = sizeof(tvi.pszText)/sizeof(tvi.pszText[0]); 
    
        // Assume the item is not a parent item, so give it a 
        // document image. 
        tvi.iImage = g_nDocument; 
        tvi.iSelectedImage = g_nDocument; 
    
        // Save the heading level in the item's application-defined 
        // data area. 
        tvi.lParam = (LPARAM)nLevel; 
        tvins.item = tvi; 
        tvins.hInsertAfter = hPrev; 
    
        // Set the parent item based on the specified level. 
        if (nLevel == 1) 
            tvins.hParent = TVI_ROOT; 
        else if (nLevel == 2) 
            tvins.hParent = hPrevRootItem; 
        else 
            tvins.hParent = hPrevLev2Item; 
    
        // Add the item to the tree-view control. 
        hPrev = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 
            0, (LPARAM)(LPTVINSERTSTRUCT)&tvins); 
    
        if (hPrev == NULL)
            return NULL;
    
        // Save the handle to the item. 
        if (nLevel == 1) 
            hPrevRootItem = hPrev; 
        else if (nLevel == 2) 
            hPrevLev2Item = hPrev; 
    
        // The new item is a child item. Give the parent item a 
        // closed folder bitmap to indicate it now has child items. 
        if (nLevel > 1)
        { 
            hti = TreeView_GetParent(hwndTV, hPrev); 
            tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; 
            tvi.hItem = hti; 
            tvi.iImage = g_nClosed; 
            tvi.iSelectedImage = g_nClosed; 
            TreeView_SetItem(hwndTV, &tvi); 
        } 
    
        return hPrev; 
    } 
    

     上面的代码,就把itme 添加到父节点上面。 这儿有个详细的解释文档

    当然,如果你使用MFC,来完成这个功能,会更方便一些。

    直接使用CTreeCtrl 这个类, 在创建tree view的时候,指定属性。

    然后使用InsertItem 方法,就可以完成,插入节点的效果。 我给你找了相关的demo,希望对你有所帮住。

    Best Regards,

    Hart

    如果你的问题解决了,请及时标记有用的回复作为答案,这样会帮助遇到相同问题的人。


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月18日 6:32
    版主