コード例 #1
0
ファイル: proptree.cpp プロジェクト: mujige77/WebGame
void CPropTree::Delete(CPropTreeItem* pItem)
{
	if (pItem && pItem!=&m_Root && SendNotify(PTN_DELETEITEM, pItem))
		return;

	// passing in a NULL item is the same as calling DeleteAllItems
	if (!pItem)
		pItem = &m_Root;

	// delete children

	CPropTreeItem* pIter;
	CPropTreeItem* pNext;

	pIter = pItem->GetChild();
	while (pIter)
	{
		pNext = pIter->GetSibling();
		DeleteItem(pIter);
		pIter = pNext;
	}

	// unlink from tree
	if (pItem->GetParent())
	{
		if (pItem->GetParent()->GetChild()==pItem)
		{
			pItem->GetParent()->SetChild(pItem->GetSibling());		
			UINT nSiblingID = 0;
			CPropTreeItem* pItemID = pItem->GetParent()->GetChild();			
			while ( pItemID )
			{
				pItemID->SetSiblingID( nSiblingID++ );
				pItemID = pItemID->GetSibling();
			}
		}
		else
		{
			pIter = pItem->GetParent()->GetChild();
			while (pIter->GetSibling() && pIter->GetSibling()!=pItem)
				pIter = pIter->GetSibling();

			CPropTreeItem* pItemID  = pIter->GetSibling();
			if ( pItemID )
			{
				UINT nSiblingID = pItem->GetSiblingID();
				while ( pItemID )
				{					
					pItemID = pItemID->GetSibling();
					if ( pItemID )
						pItemID->SetSiblingID( nSiblingID++ );
				}				
				pIter->SetSibling(pItem->GetSibling());				
			}
		}
	}

	if (pItem!=&m_Root)
	{
		if (pItem==GetFocusedItem())
			SetFocusedItem(NULL);
		delete pItem;
	}
}