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

📄 lefttreeview.cpp

📁 简单实用
💻 CPP
字号:
// LeftTreeView.cpp : implementation file
//

#include "stdafx.h"
#include "ADDRESS.h"
#include "LeftTreeView.h"
#include "ADDRESSDoc.h"
#include <string.h>
#include "MainFrm.h"
#include "PersoninfoView.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)
	ON_COMMAND(ID_DEL, OnDel)
	ON_UPDATE_COMMAND_UI(ID_DEL, OnUpdateDel)
	//}}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::AddGroupToTree(CString strGroupName)
{
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	HTREEITEM hRootItem = pCtrl->GetRootItem();
	if(hRootItem)
	{
		while(hRootItem)
		{
			CString strItemText = pCtrl->GetItemText(hRootItem);
			if(strItemText == strGroupName)
				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)strGroupName;
	HTREEITEM hGroupItem = pCtrl->InsertItem(&TCItem);
	pCtrl->SortChildren(TVI_ROOT);
	return hGroupItem;


}

void CLeftTreeView::AddPersonToTree(CString strGroupName, CString strPersonName)
{
	HTREEITEM hGroupItem = AddGroupToTree(strGroupName);
	if(hGroupItem == NULL)
		return;
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构
	TCItem.hParent = hGroupItem;
	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;//选中时图标
	CString str;
	str.Format("%s",strPersonName);
	TCItem.item.pszText = (LPTSTR)(LPCTSTR)str;
	pCtrl->InsertItem(&TCItem);

	pCtrl->SortChildren(hGroupItem);

}

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

		
	//取数据库中得所有记录
	CString strSql = "select * from addresslist";
	CCommand<CAccessor<CAddress_listAccessor> > dbaddresslist;
	long* pCount = new long;
	if(dbaddresslist.Open(pDoc->m_dbaddresslist.m_session,strSql,NULL,pCount) != S_OK)
	{
		AfxMessageBox("error");
		delete pCount;
		return;
	}
	delete pCount;
	
	
	if(dbaddresslist.MoveFirst() == S_OK)
	{
		do
		{			
			AddPersonToTree(dbaddresslist.m_groups,dbaddresslist.m_name);
		}
		while( dbaddresslist.MoveNext() == S_OK );
	}
	dbaddresslist.Close();

}

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);

	//为树视图创建图标连表
	CADDRESSApp* pApp = (CADDRESSApp*)AfxGetApp();
	CTreeCtrl* pTreeCtrl = &GetTreeCtrl();
	m_ImageList.Create(16,16,ILC_COLOR16,4,4);
	m_ImageList.Add(pApp->LoadIcon(IDI_FRIENDS));
	m_ImageList.Add(pApp->LoadIcon(IDI_PERSON));
	pTreeCtrl->SetImageList(&m_ImageList,TVSIL_NORMAL);
	
	//将住户加入树中
	AddPersonsToTree();
	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;
	if(hSelItem == NULL)
	{
		pFrame->SwitchToView(PERSONSVIEW);
		pFrame->m_pPersonsView->ShowPersons("");
		return;
	}

	//判断选择项在树中的位置
	HTREEITEM hParentItem = pCtrl->GetParentItem(hSelItem);
	CString strSql;
	if(hParentItem == NULL)
	{ //类别
		CString strGroupName = pCtrl->GetItemText(hSelItem);	
		strSql.Format("select * from addresslist where groups = '%s'",strGroupName);
		pFrame->SwitchToView(PERSONSVIEW);
		pFrame->m_pPersonsView->ShowPersons(strSql);
		return;	
	}
	hParentItem = pCtrl->GetParentItem(hParentItem);
	if(hParentItem == NULL)
	{ //姓名
		CString strGroupName = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem));
		CString PersonName = pCtrl->GetItemText(hSelItem);
		strSql.Format("select * from house where groups = '%s' and name = %s",
			strGroupName,PersonName);
		pFrame->SwitchToView(PERSONINFOVIEW);
		pFrame->m_pPersoninfoView->UpdatePersonInfo(strGroupName,PersonName);
		return;	
	}
}

void CLeftTreeView::OnDel() 
{
	// TODO: Add your command handler code here
	if( m_hHitItem == NULL )
		return;
	CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
	CADDRESSDoc* pDoc = (CADDRESSDoc*)GetDocument();
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	HTREEITEM hParentItem = pCtrl->GetParentItem( m_hHitItem );

	CString strSql;
	if( hParentItem == NULL && m_hHitItem != NULL )
	{	//分类
		CString strGroupName = pCtrl->GetItemText(m_hHitItem);	
		strSql.Format("delete * from addresslist where groups = '%s'",strGroupName);
		if(this->MessageBox("你真的要删除该类中的所有联系人吗,请注意,删除所有了?",
			"通讯录管理系统",MB_YESNO)==IDNO)
			return;
	}
	else 
	{	//联系人
		CString strGroupName = pCtrl->GetItemText(pCtrl->GetParentItem(m_hHitItem));
		CString str = pCtrl->GetItemText(m_hHitItem);
		strSql.Format("delete * from addresslist where groups = '%s' and name = '%s'",
			strGroupName,str);
		if(this->MessageBox("你真的要删除该联系人吗?",
			"通讯录管理系统",MB_YESNO)==IDNO)
			return;
	}	
	pDoc->DeletePerson(strSql);
	AddPersonsToTree();
	pFrame->SwitchToView(PERSONSVIEW);
	pFrame->m_pPersonsView->ShowPersons("");
	
}

void CLeftTreeView::OnUpdateDel(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(m_hHitItem != NULL);
	
}

⌨️ 快捷键说明

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