📄 group.cpp
字号:
// Group.cpp: implementation of the CGroup class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BeeReader.h"
#include "Group.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGroup::CGroup(CString strGroupSaveTag,CString strName)
{
m_GroupName = strName;
m_GroupSaveTag = _T("");
m_pTreeCtrl = NULL;
m_RootNode.dwData = 0;
m_RootNode.pFirstChild = NULL;
m_RootNode.pNextSibling = NULL;
m_RootNode.pParentNode = NULL;
m_RootNode.pNextNode = NULL;
m_RootNode.pLastSibling = NULL;
m_RootNode.szNodeName = m_GroupName;
}
CGroup::~CGroup()
{
//Clear();
}
void CGroup::Clear()
{
PGROUPNODE pg,pg1;
pg = m_RootNode.pNextSibling;
while( pg )
{
pg1 = pg;
pg = pg->pNextNode;
delete( pg1 );
}
pg = m_RootNode.pNextNode ;
while(pg)
{
pg1 = pg;
pg = pg->pNextNode;
delete(pg1);
}
}
//加载组信息到内存组树中.
BOOL CGroup::Load()
{
return TRUE;
}
//存储内存组树内容.
BOOL CGroup::Save()
{
return TRUE;
}
//根据结点名称查找结点.
PGROUPNODE CGroup::FindGroupNode(CString szName)
{
return FindNode( &m_RootNode,szName );
}
//根据结点中的关联对象查找结点.
PGROUPNODE CGroup::FindNode(DWORD dwData)
{
PGROUPNODE pList = m_RootNode.pNextSibling;
while( pList )
{
if( pList->dwData == dwData ) return pList;
pList = pList->pNextNode ;
}
return NULL;
}
PGROUPNODE CGroup::FindNode(PGROUPNODE pNode, CString szName)
{
if( !pNode ) return NULL;
PGROUPNODE pg = pNode;
if(pg->szNodeName.CompareNoCase(szName) == 0)
return pg;
if( pNode->pNextSibling != pNode->pParentNode->pFirstChild )
{
pg=FindNode( pNode->pNextSibling,szName);
if( pg ) return pg;
}
if( pNode->pFirstChild )
{
pg = FindNode( pNode->pFirstChild,szName);
if( pg ) return pg;
}
return NULL;
}
//新增一个结点。
PGROUPNODE CGroup::Insert(PGROUPNODE pParentNode, PGROUPNODE pNode,CString szName, DWORD dwData)
{
if( !pParentNode || pParentNode->dwData!= 0 ) return NULL;
PGROUPNODE pg = NULL;
pg = new( GROUPNODE );
pg->dwData = dwData;
pg->pFirstChild = NULL;
pg->pNextNode = NULL;
pg->pParentNode = pParentNode;
pg->szNodeName = szName;
pg->pNextSibling = NULL;
if( dwData != 0 ) //添加叶子结点链表。
{
if( m_RootNode.pNextSibling )
{
(m_RootNode.pLastSibling)->pNextNode = pg;
m_RootNode.pLastSibling = pg;
}
else
{
m_RootNode.pNextSibling = pg;
m_RootNode.pLastSibling = pg;
}
}
else //添加子组结点链表,以便于释放结点资源。
{
if( m_RootNode.pNextNode ) //m_RootNode.pNextNode指向组结点链表头结点,m_RootNode.pParentNode指向组结点链表尾结点。
{
(m_RootNode.pParentNode)->pNextNode = pg;
m_RootNode.pParentNode = pg;
}
else
{
m_RootNode.pNextNode = pg;
m_RootNode.pParentNode = pg;
}
}
if( pNode && (pNode->pParentNode == pParentNode) )
{
if( pParentNode->pFirstChild == pNode ) //插入到父站点的第一个结点前。
{
pParentNode->pFirstChild = pg;
pg->pNextSibling = pNode;
pg->pLastSibling = pNode->pLastSibling;
pNode->pLastSibling = pg;
}
else
{
pg->pLastSibling = pNode->pLastSibling;
pg->pNextSibling = pNode;
pNode->pLastSibling = pg;
}
}
else //插入到pParentNode儿子站点中最后一位。
{
if( pParentNode->pFirstChild )
{
pg->pLastSibling = (pParentNode->pFirstChild)->pLastSibling;
pg->pNextSibling = pParentNode->pFirstChild;
((pParentNode->pFirstChild)->pLastSibling)->pNextSibling = pg;
(pParentNode->pFirstChild)->pLastSibling = pg;
}
else
{
pg->pLastSibling = pg;
pg->pNextSibling = pg;
pParentNode->pFirstChild = pg;
}
}
return pg;
}
PGROUPNODE CGroup::GetRootNode()
{
return &m_RootNode;
}
BOOL CGroup::ReMoveNode(PGROUPNODE pNode,BOOL bChild)
{
if( !pNode ) return FALSE;
if( bChild ) //同时移去其儿子结点
{
if( pNode->pFirstChild )
{
while( pNode->pFirstChild )
{
ReMoveNode( pNode->pFirstChild,bChild );
}
}
}
//执行移去
if( pNode->pParentNode->pFirstChild != pNode ) //不是父结点的第一个儿子结点.
{
pNode->pNextSibling->pLastSibling = pNode->pLastSibling ;
pNode->pLastSibling->pNextSibling = pNode->pNextSibling;
ReMoveNodeList( pNode );
}
else
{
if( pNode->pLastSibling == pNode ) //只有一个结点.
pNode->pParentNode->pFirstChild = NULL;
else
{
pNode->pNextSibling->pLastSibling = pNode->pLastSibling;
pNode->pLastSibling->pNextSibling = pNode->pNextSibling;
pNode->pParentNode->pFirstChild = pNode->pNextSibling;
}
ReMoveNodeList(pNode);
}//end if
return TRUE;
}
void CGroup::ReMoveNodeList(PGROUPNODE pNode)
{
if( !pNode ) return;
PGROUPNODE pg = NULL,pPrev = NULL;
if( pNode->dwData != 0 )
pg = m_RootNode.pNextSibling;
else
pg = m_RootNode.pNextNode;
while( pg )
{
if( pg == pNode )
{
if( pPrev == NULL )
{
if( pNode->dwData == 0 ) m_RootNode.pNextNode = NULL;
else m_RootNode.pNextSibling = NULL;
}
else
{
pPrev->pNextNode = pNode->pNextNode ;
}
delete( pNode );
break;
}
else
{
pPrev = pg;
pg = pg->pNextNode;
}
}
}
void CGroup::ReName(PGROUPNODE pNode, CString szNewName)
{
pNode->szNodeName = szNewName;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -