void Group::Add(CPtrList& listObj) { Figure* pObj; POSITION pos = listObj.GetHeadPosition(); while (pos) { pObj = (Figure*)listObj.GetNext(pos); pObj->SetGrouped(TRUE); //현재 개체가 그룹이 되었음을 표시 if (pObj->thisobject() == MYGROUP) //그룹일 경우 Child.AddTail((Group*)pObj); //차일드에 추가 else //그룹이 아닐 경우 NodeData.AddTail(pObj); //노드 데이터에 추가 } }
// 그룹핑을 해제시키는 함수 void Group::DisGrouping(CPtrList& listObj, CPtrList& listObj2) { //노드 데이터 부분의 그룹 해제 POSITION posNode = this->NodeData.GetHeadPosition(); while (posNode) //노드 데이터 리스트 순회 { Figure* pObj = (Figure*)this->NodeData.GetNext(posNode); pObj->SetGrouped(FALSE); //그룹이 아님을 표시 pObj->setSelected(TRUE); listObj.AddTail(pObj); //선택 리스트에 넣음 listObj2.AddTail(pObj); //선택 리스트에 넣음 } this->NodeData.RemoveAll(); //차일드 부분의 그룹 해제 POSITION posChild = this->Child.GetHeadPosition(); while (posChild) //차일드 리스트 순회 { Group* pObj = (Group*)this->Child.GetNext(posChild); pObj->SetGrouped(FALSE); //그룹이 아님을 표시 listObj.AddTail(pObj); //선택 리스트에 넣음 listObj2.AddTail(pObj); //선택 리스트에 넣음 } }