不要用数据库,建议使用映射表CMap
typedef struct ST_TREE_NODE_t{
HTREEITEM hItem; // 结点句柄
INT nType; // 结点类型
INT nErrHvrNum; // 状态异常数
INT nConnectHvrNum; // 状态连结数
HTREEITEM hParentHItem; // 父结点句柄
ULONG Id; // 结点编号
}ST_TREE_NODE;
把你要记录的信息先定义到Map中
每次进行增删改查时都要更新该表,否则必出错。
映射表的具体操作可查MSDN。现将常用的说明如下:
能用到的大概为两种CMapPtrToPtr,对想到对象。即通过节点找信息Item——〉pNode
CMapWordToPtr。数值找信息。如:Id-->Item。使用的表越多可查找的信息量越大,查找越灵活,维护越困难。这里的实质就是用映射表代替数据库操作。
向Map加入信息:
CMapPtrToPtr m_mapNode;
ST_TREE_NODE *pNode = NULL;
pNode = new ST_TREE_NODE;
if( pNode == NULL )
{
错误处理
}
// 因为是动态分配内存所以要先清空该内存一面加代物用数据
memset( pNode, 0, sizeof(ST_TREE_NODE) );
// 为各项付值
pNode->hItem = hCate; //
pNode->nType = nType; //
pNode->hParentHItem = nType == D_PC_NODE_CATE_1 ? m_hRoot : hParentCate; //
pNode->Id = dwCateId; //
// 储存
m_mapNode.SetAt( hCate, pNode );
删除节点信息
m_mapNode。RemoveKey(hCate);
// 释放掉原来开辟的内存。否则内存会泄露,在析构函数中也要写
if ( pNode != NULL)
{
delete pNode;
pNode = NULL;
}
用动态分配内存一定要注意释放和泄漏问题
所谓怎删改查就是增加和消除,以及其复用。具体说
增加节点:InsertItem。
消除节点:DeletItem
修改节点:先DeletItem再InsertItem
查找节点:感觉有点无聊可看具体来定
(对于这种方法我已经实现并测试过,可代码太庞杂了,我是写了个CTreeCtrl的派生类里面包含了许多功能,你未必能用到。如果有不明白的地方请继续提问,大家一起讨论阿)