unittree.cpp
来自「课程设计的简单Access学生数据库系统」· C++ 代码 · 共 182 行
CPP
182 行
// UnitTree.cpp: implementation of the UnitTree class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SM.h"
#include "Unit.h"
#include "UnitTree.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//##ModelId=40A481F0015C
UnitTree::UnitTree(CTreeCtrl * pTreeCtrl):pTree(pTreeCtrl)
{
pUnitTable = new CDaoTableDef(&theDatabase);
pUnitTable->Open(_T("unit"));
pUnitRS = new CDaoRecordset();
pUnitRS->Open(pUnitTable);
ImageList.Create(16, 16, ILC_COLOR24 | ILC_MASK, 6, 4);
ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
pTree->SetImageList(&ImageList, TVSIL_NORMAL);
}
//##ModelId=40A481F00167
UnitTree::~UnitTree()
{
pUnitRS->Close();
pUnitTable->Close();
delete pUnitRS;
delete pUnitTable;
}
//##ModelId=40A481F000DB
bool UnitTree::Load()
{
Clear();
LoadAll(1, TVI_ROOT);
this->SetSelectUnit(1);
return true;
}
//##ModelId=40A481F0008D
void UnitTree::LoadAll(int ID, HTREEITEM parent)
{
COleVariant var;
var.ChangeType(VT_I4);
var.lVal = (long)ID;
pUnitRS->SetCurrentIndex(_T("id"));
if(pUnitRS->Seek("=", &var))
{
CDaoVariant v_ID, v_name, v_superior;
//插入当前树结点
v_ID = pUnitRS->GetFieldValue("ID");
v_name = pUnitRS->GetFieldValue("Unit");
v_superior = pUnitRS->GetFieldValue("Superior_id");
Units.push_back(Unit(v_ID.AsInt(), v_name.AsString(), v_superior.AsInt()));
HTREEITEM item = pTree->InsertItem(v_name.AsString(), 1, 0, parent);
Items.push_back(item);
pTree->SetItemData(item, DWORD(Items.size()-1));
//插入子结点
pUnitRS->SetCurrentIndex(_T("Superior_id"));
if(pUnitRS->Seek("=", &var))
{
vector<int> childs;
int id, sid;
do
{
id = pUnitRS->GetFieldValue("ID").lVal;
sid = pUnitRS->GetFieldValue("Superior_id").lVal;
if(sid == ID)
childs.push_back(id);
pUnitRS->MoveNext();
}
while(sid==ID && !pUnitRS->IsEOF());
for(int i=0; i<childs.size(); i++)
LoadAll(childs[i], item);
}
else
{
return;
}
}
else
return;
}
//##ModelId=40A481F00082
void UnitTree::Clear()
{
pTree->DeleteAllItems();
Units.clear();
Items.clear();
}
//##ModelId=40A481F00080
Unit& UnitTree::GetSelcetUnit()
{
HTREEITEM item = pTree->GetSelectedItem();
ASSERT(item != NULL);
if(item != NULL)
return Units[pTree->GetItemData(item)];
else
return Units[0];//缺省返回
}
//##ModelId=40A481F0007D
bool UnitTree::SetSelectUnit(int ID)
{
for(int i=0;i<Units.size();i++)
if(Units[i].ID==ID)
break;
if(i==Units.size())
return false;
pTree->Select(Items[i], TVGN_FIRSTVISIBLE);
pTree->SelectItem(Items[i]);
return true;
}
//##ModelId=40A481F0006D
bool UnitTree::IsChild(int father_id, int child_id)
{
if(father_id == child_id)
return false;
HTREEITEM father;
HTREEITEM child;
int flag =0, i;
for(i=0;i<Units.size();i++)
{
if(Units[i].ID==father_id)
father = Items[i], flag++;
if(Units[i].ID==child_id)
child = Items[i], flag++;
if(flag==2)
break;
}
if(i==Units.size())
return false;
HTREEITEM item = child;
while((item=pTree->GetParentItem(item)))
if(item==father)
return true;
return false;
}
//##ModelId=40A481F0005D
long UnitTree::GetParent(long ID)
{
COleVariant var(ID);
pUnitRS->SetCurrentIndex(_T("id"));
if(pUnitRS->Seek("=", &var))
return pUnitRS->GetFieldValue("Superior_ID").lVal;
return 0;
}
//##ModelId=40A481F00040
bool UnitTree::IsSelected()
{
return pTree->GetSelectedItem()!=NULL;
}
//##ModelId=40A481F0003F
void UnitTree::ExpandRoot()
{
pTree->Expand(pTree->GetRootItem(),TVE_EXPAND);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?