⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lefttreeview.cpp

📁 学生信息管理的系统
💻 CPP
字号:
// LeftTreeView.cpp : implementation file
//

#include "stdafx.h"
#include "member.h"
#include "LeftTreeView.h"
#include "MemberDoc.h"
#include "MemberReSet.h"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView

IMPLEMENT_DYNCREATE(CLeftTreeView, CTreeView)

CLeftTreeView::CLeftTreeView()
{
}

CLeftTreeView::~CLeftTreeView()
{
}


BEGIN_MESSAGE_MAP(CLeftTreeView, CTreeView)
	//{{AFX_MSG_MAP(CLeftTreeView)
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView drawing

void CLeftTreeView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView diagnostics

#ifdef _DEBUG
void CLeftTreeView::AssertValid() const
{
	CTreeView::AssertValid();
}

void CLeftTreeView::Dump(CDumpContext& dc) const
{
	CTreeView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView message handlers



HTREEITEM CLeftTreeView::AddInsToTree(CString strSectionName)
{
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	HTREEITEM hRootItem = pCtrl->GetRootItem();
	if(hRootItem)
	{
		while(hRootItem)
		{
			CString strItemText = pCtrl->GetItemText(hRootItem);
			if(strItemText == strSectionName)
				return hRootItem;
			hRootItem = pCtrl->GetNextSiblingItem(hRootItem);
		}
	}
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构
	TCItem.hParent = TVI_ROOT;
	TCItem.hInsertAfter = TVI_LAST;
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽
	TCItem.item.lParam=0;//序号
	TCItem.item.iImage=0;//正常图标
	TCItem.item.iSelectedImage=0;//选中时图标

	TCItem.item.pszText = (LPTSTR)(LPCTSTR)strSectionName;
	HTREEITEM hSectionItem = pCtrl->InsertItem(&TCItem);
	pCtrl->SortChildren(TVI_ROOT);
	return hSectionItem;
}

HTREEITEM CLeftTreeView::AddBuildingToTree(HTREEITEM hSectionItem, CString nBuildingnum)
{
	if(hSectionItem == NULL)
		return NULL;
	CTreeCtrl* pCtrl = &GetTreeCtrl();
//	CString strBuildingNum;
//	strBuildingNum.Format("%d号楼",nBuildingnum);
	if(pCtrl->ItemHasChildren(hSectionItem))
	{
		HTREEITEM hItem = pCtrl->GetChildItem(hSectionItem);
		while(hItem)
		{
			CString strItemText = pCtrl->GetItemText(hItem);
			if(strItemText == nBuildingnum)
				return hItem;
			hItem = pCtrl->GetNextSiblingItem(hItem);
		}
	}
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构
	TCItem.hParent = hSectionItem;
	TCItem.hInsertAfter = TVI_LAST;
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽
	TCItem.item.lParam=0;//序号
	TCItem.item.iImage=1;//正常图标
	TCItem.item.iSelectedImage=1;//选中时图标

	TCItem.item.pszText = (LPTSTR)(LPCTSTR)nBuildingnum;
	HTREEITEM hBuildingItem = pCtrl->InsertItem(&TCItem);

	pCtrl->SortChildren(hSectionItem);
	return hBuildingItem;
}

HTREEITEM CLeftTreeView::AddCellToTree(HTREEITEM hBuildingItem, CString nCellnum)
{
if(hBuildingItem == NULL)
		return NULL;
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	if(pCtrl->ItemHasChildren(hBuildingItem))
	{
		HTREEITEM hItem = pCtrl->GetChildItem(hBuildingItem);
		while(hItem)
		{
			CString strItemText = pCtrl->GetItemText(hItem);
			if(strItemText == nCellnum)
				return hItem;
			hItem = pCtrl->GetNextSiblingItem(hItem);
		}
	}
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构
	TCItem.hParent = hBuildingItem;
	TCItem.hInsertAfter = TVI_LAST;
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽
	TCItem.item.lParam=0;//序号
	TCItem.item.iImage=2;//正常图标
	TCItem.item.iSelectedImage=2;//选中时图标

	TCItem.item.pszText = (LPTSTR)(LPCTSTR)nCellnum;
	HTREEITEM hCellItem = pCtrl->InsertItem(&TCItem);

	pCtrl->SortChildren(hBuildingItem);
	return hCellItem;
}

void CLeftTreeView::AddMemberToTree()
{
	CMemberDoc* pDoc = (CMemberDoc*)GetDocument();
	if(pDoc==NULL)
		return;
	//清空树
	GetTreeCtrl().DeleteAllItems();

	//取数据库中得所有记录
	
    CMemberReSet m_MemberReSet;
	try
	{
		if(m_MemberReSet.IsOpen())
			m_MemberReSet.Close();
        CString strSql;
		m_MemberReSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
		m_MemberReSet.MoveFirst();
		while(!m_MemberReSet.IsEOF())
		{
			AddMemberToTree(m_MemberReSet.m_MemYear,m_MemberReSet.m_MemIns,m_MemberReSet.m_MemSpe,m_MemberReSet.m_MemName);
			m_MemberReSet.MoveNext();
		}
		if(m_MemberReSet.IsOpen())
			m_MemberReSet.Close();
	}
	catch(CDBException *e)
	{
		e->Delete();
		return;
	}
}

void CLeftTreeView::AddMemberToTree(CString strSectionName,CString nBuildingNum,CString nCellNum,CString nRoomNum)
{
    HTREEITEM hSectionItem = AddInsToTree(strSectionName);
	HTREEITEM hBuildingItem = AddBuildingToTree(hSectionItem,nBuildingNum);
	HTREEITEM hCellItem = AddCellToTree(hBuildingItem,nCellNum);
	if(hCellItem == NULL)
		return;
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构
	TCItem.hParent = hCellItem;
	TCItem.hInsertAfter = TVI_LAST;
	TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽
	TCItem.item.lParam=0;//序号
	TCItem.item.iImage=3;//正常图标
	TCItem.item.iSelectedImage=3;//选中时图标
	TCItem.item.pszText = (LPTSTR)(LPCTSTR)nRoomNum;
	pCtrl->InsertItem(&TCItem);

	pCtrl->SortChildren(hCellItem);
}

void CLeftTreeView::OnInitialUpdate() 
{
	CTreeView::OnInitialUpdate();

	//设置树风格
	::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE | WS_TABSTOP 
						| WS_CHILD | WS_BORDER| TVS_HASBUTTONS 
						| TVS_LINESATROOT | TVS_HASLINES
						| TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS);

	//为树视图创建图标连表
	CMemberApp* pApp = (CMemberApp*)AfxGetApp();
	CTreeCtrl* pTreeCtrl = &GetTreeCtrl();
	m_ImageList.Create(16,16,ILC_COLOR16,4,4);
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_YEAR));
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_INS));
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_SPE));
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_MEMBER));
	pTreeCtrl->SetImageList(&m_ImageList,TVSIL_NORMAL);

	//将住户加入树中
	AddMemberToTree();
	pTreeCtrl->SortChildren(TVI_ROOT);
}

void CLeftTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	*pResult = 0;

	//获得被选择项
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	HTREEITEM hSelItem = pCtrl->GetSelectedItem();
	m_hHitItem = hSelItem;

	//如果没有项被选择,则将右边的列表视图清空
	CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	//判断选择项在树中的位置
	HTREEITEM hParentItem = pCtrl->GetParentItem(hSelItem);
	CString strSql,strSectionName,strBuildingNum,strCellNum,strRoomNum;
	if(hParentItem == NULL)
	{ //所在年纪
		CString strSectionName = pCtrl->GetItemText(hSelItem);	
		pFrame->m_ListView->ListMember("年级",strSectionName);
		return;	
	}
	hParentItem = pCtrl->GetParentItem(hParentItem);
	if(hParentItem == NULL)
	{ //学院
		strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem));
		CString str = pCtrl->GetItemText(hSelItem);
		strSql.Format("'%s' and MemIns = '%s'",strSectionName,str);
		pFrame->m_ListView->ListMember("年级tree",strSql);
		return;	
	}
	hParentItem = pCtrl->GetParentItem(hParentItem);
	if(hParentItem == NULL)
	{ //专业
		strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(pCtrl->GetParentItem(hSelItem)));
		CString str = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem));
		CString str1 = pCtrl->GetItemText(hSelItem);
		strSql.Format("'%s'  and MemIns = '%s' and MemSpe= '%s'",strSectionName,str,str1);
		pFrame->m_ListView->ListMember("年级tree",strSql);
		return;	
	}
	strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(pCtrl->GetParentItem(pCtrl->GetParentItem(hSelItem))));
	CString str1 = pCtrl->GetItemText(pCtrl->GetParentItem(pCtrl->GetParentItem(hSelItem)));
	CString str2 = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem));
	CString str3 = pCtrl->GetItemText(hSelItem);
	CString strsql;
	strSql.Format("'%s'  and MemIns = '%s' and MemSpe= '%s' and MemName='%s'",strSectionName,str1,str2,str3);
	pFrame->m_ListView->ListMember("年级tree",strSql);
	UpdateData(TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -