📄 lefttreeview.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 + -