凄然的马卡龙 2015-08-17 05:13 采纳率: 100%
浏览 1560
已采纳

vc6 树形控件读取并绘制的问题

我有一些无序带节点名的数据
比如
1,22,3,=a
1,22,4,=b
1,33,5,=c
1,22,6,=d
要写成这样的
图片说明
该怎么写算法啊,主要是判断父节点有无和指针的问题

  • 写回答

5条回答

  • threenewbee 2015-08-17 12:10
    关注
     CString * CTreeappDlg::SplitString(CString str, char split, int& iSubStrs)
    {
        int iPos = 0; //分割符位置
        int iNums = 0; //分割符的总数
        CString strTemp = str;
        CString strRight;
        //先计算子字符串的数量
        while (iPos != -1)
        {
            iPos = strTemp.Find(split);
            if (iPos == -1)
            {
                break;
            }
            strRight = strTemp.Mid(iPos + 1, str.GetLength());
            strTemp = strRight;
            iNums++;
        }
        if (iNums == 0) //没有找到分割符
        {
            //子字符串数就是字符串本身
            iSubStrs = 1; 
            return NULL;
        }
        //子字符串数组
        iSubStrs = iNums + 1; //子串的数量 = 分割符数量 + 1
        CString* pStrSplit;
        pStrSplit = new CString[iSubStrs];
        strTemp = str;
        CString strLeft;
        for (int i = 0; i < iNums; i++)
        {
            iPos = strTemp.Find(split);
            //左子串
            strLeft = strTemp.Left(iPos);
            //右子串
            strRight = strTemp.Mid(iPos + 1, strTemp.GetLength());
            strTemp = strRight;
            pStrSplit[i] = strLeft;
        }
        pStrSplit[iNums] = strTemp;
        return pStrSplit;
    }
    
    
    void CTreeappDlg::Append(CString str)
    {
        int n = 0;
        CString * data = SplitString(str, ',', n);
    
        HTREEITEM hRootItem;
        hRootItem = m_tree.GetRootItem();
        bool b = false;
        while (hRootItem != NULL)
        {
            if (m_tree.GetItemText(hRootItem) == data[0])
            {
                b = true;
                break;
            }
            hRootItem = m_tree.GetNextItem(hRootItem, TVGN_NEXT);
        }
        if (!b)
        {
            hRootItem = m_tree.InsertItem((LPCTSTR)data[0]);
        }
    
        for (int i = 1; i < 3; i++)
        {
            HTREEITEM pre = hRootItem;
            hRootItem = m_tree.GetChildItem(hRootItem);
            b = false;
            while (hRootItem != NULL)
            {
                if (m_tree.GetItemText(hRootItem) == data[i])
                {
                    b = true;
                    break;
                }
                hRootItem = m_tree.GetNextItem(hRootItem, TVGN_NEXT);
            }
            if (!b)
            {
                hRootItem = m_tree.InsertItem((LPCTSTR)data[i], pre);
                m_tree.Expand(pre,TVE_EXPAND);
            }
        }
    }
    
    void CTreeappDlg::OnButton1() 
    {
        Append("1,22,3,=a");
        Append("1,22,4,=b");
        Append("1,33,5,=c");
        Append("1,22,6,=d");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题