?? lefttreeview.cpp
字號:
// LeftTreeView.cpp : implementation file
//
#include "stdafx.h"
#include "INhabitants.h"
#include "LeftTreeView.h"
#include "INhabitantsDoc.h"
#include "MainFrm.h"
#include "UsersListView.h"
#include "UserinfoView.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_OPERATE_DELETE, OnOperateDelete)
ON_UPDATE_COMMAND_UI(ID_OPERATE_DELETE, OnUpdateOperateDelete)
//}}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::AddSectionToTree(CString strSectionName)
{
CTreeCtrl * pCtrl = &GetTreeCtrl();
HTREEITEM hRootItem = pCtrl->GetRootItem();
if(hRootItem){
while(hRootItem){
CString strItemText = pCtrl->GetItemText(hRootItem);
if(strSectionName == strItemText)
return hRootItem;
hRootItem = pCtrl->GetNextSiblingItem(hRootItem);
}
}
// else return NULL;
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, int 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 == strBuildingNum)
return hItem;
hItem = pCtrl->GetNextSiblingItem(hItem);
}
}
// else return NULL;
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)strBuildingNum;
HTREEITEM hBuildingItem = pCtrl->InsertItem(&TCItem);
pCtrl->SortChildren(hSectionItem);
return hBuildingItem;
}
HTREEITEM CLeftTreeView::AddCellToTree(HTREEITEM hBuildingItem, int nCellnum)
{
if(hBuildingItem == NULL)
return NULL;
CTreeCtrl* pCtrl = &GetTreeCtrl();
CString strCellNum;
strCellNum.Format("%d單元",nCellnum);
if(pCtrl->ItemHasChildren(hBuildingItem))
{
HTREEITEM hItem = pCtrl->GetChildItem(hBuildingItem);
while(hItem)
{
CString strItemText = pCtrl->GetItemText(hItem);
if(strItemText == strCellNum)
return hItem;
hItem = pCtrl->GetNextSiblingItem(hItem);
}
}
// else return NULL;
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)strCellNum;
HTREEITEM hCellItem = pCtrl->InsertItem(&TCItem);
pCtrl->SortChildren(hBuildingItem);
return hCellItem;
}
void CLeftTreeView::AddUserToTree(CString strSectionName, int nBuildingNum, int nCellNum, int nRoomNum)
{
HTREEITEM hSectionItem = AddSectionToTree(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;
CString str;
str.Format("%d", nRoomNum);
TCItem.item.pszText = (LPTSTR)(LPCTSTR)str;
pCtrl->InsertItem(&TCItem);
pCtrl->SortChildren(hCellItem);
}
void CLeftTreeView::AddUsersToTree()
{
CINhabitantsDoc * pDoc = (CINhabitantsDoc *)GetDocument();
if(pDoc == NULL)
return;
GetTreeCtrl().DeleteAllItems();
CString strSql = "select * from house";
CCommand<CAccessor<ChouseAccessor> > dbHouse;
long * pCount = new long;
if(dbHouse.Open(pDoc->m_dbHouse.m_session, strSql, NULL, pCount) != S_OK){
AfxMessageBox("error");
delete pCount;
return;
}
delete pCount;
if(dbHouse.MoveFirst() == S_OK){
do{
AddUserToTree(dbHouse.m_sectionname, dbHouse.m_buildingnum,
dbHouse.m_cellnum, dbHouse.m_roomnum);
}while(dbHouse.MoveNext() == S_OK);
}
dbHouse.Close();
}
void CLeftTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE | WS_TABSTOP
| WS_CHILD | WS_BORDER| TVS_HASBUTTONS
| TVS_LINESATROOT | TVS_HASLINES
| TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS);
CINhabitantsApp * pApp = (CINhabitantsApp *)AfxGetApp();
CTreeCtrl * pTreeCtrl = &GetTreeCtrl();
m_ImageList.Create(16, 16, ILC_COLOR16, 4, 4);
m_ImageList.Add(pApp->LoadIcon(IDI_ICON_SECTION));
m_ImageList.Add(pApp->LoadIcon(IDI_ICON_BUILDING));
m_ImageList.Add(pApp->LoadIcon(IDI_ICON_CELL));
m_ImageList.Add(pApp->LoadIcon(IDI_ICON_USER));
pTreeCtrl->SetImageList(&m_ImageList, TVSIL_NORMAL);
AddUsersToTree();
pTreeCtrl->SortChildren(TVI_ROOT);
}
void CLeftTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
*pResult = 0;
// TODO: Add your control notification handler code here
CTreeCtrl * pCtrl = &GetTreeCtrl();
HTREEITEM hSelItem = pCtrl->GetSelectedItem();
m_hHitItem = hSelItem;
CMainFrame * pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
if(hSelItem == NULL){
pFrame->SwitchToView(USERSVIEW);
pFrame->m_pUsersView->ShowUsers("");
return;
}
HTREEITEM hParentItem = pCtrl->GetParentItem(hSelItem);
CString strSql, strSectionName, strBuildingNum, strCellNum, strRoomNum;
if(hParentItem == NULL){//小區
strSectionName = pCtrl->GetItemText(hSelItem);
strSql.Format("select * from house where sectionname = '%s'", strSectionName);
pFrame->SwitchToView(USERSVIEW);
pFrame->m_pUsersView->ShowUsers(strSql);
return;
}
hParentItem = pCtrl->GetParentItem(hParentItem);
if(hParentItem == NULL){//樓
strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem));
CString str = pCtrl->GetItemText(hSelItem);
int n = str.Find("號樓");
strBuildingNum = str.Left(n);
strSql.Format("select * from house where sectionname = '%s' and buildingnum = %s",
strSectionName, strBuildingNum);
pFrame->SwitchToView(USERSVIEW);
pFrame->m_pUsersView->ShowUsers(strSql);
return;
}
hParentItem = pCtrl->GetParentItem(hParentItem);
if(hParentItem == NULL){//單元
strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(pCtrl->GetParentItem(hSelItem)));
CString str = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem));
int n = str.Find("號樓");
strBuildingNum = str.Left(n);
str = pCtrl->GetItemText(hSelItem);
n = str.Find("單元");
strCellNum = str.Left(n);
strSql.Format("select * from house where sectionname = '%s' and buildingnum = %s and cellnum = %s",
strSectionName, strBuildingNum, strCellNum);
pFrame->SwitchToView(USERSVIEW);
pFrame->m_pUsersView->ShowUsers(strSql);
return;
}
//房間
strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(pCtrl->GetParentItem(pCtrl->GetParentItem(hSelItem))));
CString str = pCtrl->GetItemText(pCtrl->GetParentItem(pCtrl->GetParentItem(hSelItem)));
int n = str.Find("號樓");
strBuildingNum = str.Left(n);
str = pCtrl->GetItemText(pCtrl->GetParentItem(hSelItem));
n = str.Find("單元");
strCellNum = str.Left(n);
strRoomNum = pCtrl->GetItemText(hSelItem);
pFrame->SwitchToView(USERINFOVIEW);
pFrame->m_pUserinfoView->UpdateUserInfo(strSectionName,
atoi(strBuildingNum.GetBuffer(0)),
atoi(strCellNum.GetBuffer(0)),
atoi(strRoomNum.GetBuffer(0)));
}
void CLeftTreeView::OnOperateDelete()
{
// TODO: Add your command handler code here
if(m_hHitItem == NULL)
return;
CMainFrame * pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
CINhabitantsDoc * pDoc = (CINhabitantsDoc *)GetDocument();
CTreeCtrl * pCtrl = &GetTreeCtrl();
HTREEITEM hParentItem = pCtrl->GetParentItem(m_hHitItem);
CString strSql;
//小區
if(hParentItem == NULL && m_hHitItem != NULL){
CString strSectionName = pCtrl->GetItemText(m_hHitItem);
strSql.Format("delete * from house where sectionname = '%s'", strSectionName);
if(this->MessageBox("你真的要刪除該小區中的所有住戶嗎?",
"小區居民管理系統", MB_YESNO) == IDNO)
return;
}
//樓
else if(hParentItem != NULL &&
pCtrl->GetParentItem(hParentItem) == NULL){
CString strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(m_hHitItem));
CString str = pCtrl->GetItemText(m_hHitItem);
int n = str.Find("號樓");
CString strBuildingNum = str.Left(n);
strSql.Format("delete * from house where sectionname = '%s' and buildingnum = %s",
strSectionName, strBuildingNum);
if(this->MessageBox("你真的要刪除該樓中的所有住戶嗎?",
"小區居民管理系統", MB_YESNO) == IDNO)
return;
}
//單元
else if(pCtrl->GetParentItem(hParentItem) != NULL &&
pCtrl->GetParentItem(pCtrl->GetParentItem(hParentItem)) == NULL){
CString strSectionName = pCtrl->GetItemText(
pCtrl->GetParentItem(pCtrl->GetParentItem(m_hHitItem)));
CString str = pCtrl->GetItemText(pCtrl->GetParentItem(m_hHitItem));
int n = str.Find("號樓");
CString strBuildingNum = str.Left(n);
str = pCtrl->GetItemText(m_hHitItem);
n = str.Find("單元");
CString strCellNum = str.Left(n);
strSql.Format("select * from house where sectionname = '%s' \
and buildingnum = %s and cellnum = %s",
strSectionName, strBuildingNum, strCellNum);
if(this->MessageBox("你真的要刪除該單元中的所有住戶嗎?",
"小區居民管理系統", MB_YESNO) == IDNO)
return;
}
//住戶
else{
CString strSectionName = pCtrl->GetItemText(pCtrl->GetParentItem(
pCtrl->GetParentItem(pCtrl->GetParentItem(m_hHitItem))));
CString str = pCtrl->GetItemText(
pCtrl->GetParentItem(pCtrl->GetParentItem(m_hHitItem)));
int n = str.Find("號樓");
CString strBuildingNum = str.Left(n);
str = pCtrl->GetItemText(pCtrl->GetParentItem(m_hHitItem));
n = str.Find("單元");
CString strCellNum = str.Left(n);
CString strRoomNum = pCtrl->GetItemText(m_hHitItem);
strSql.Format("select * from house where sectionname = '%s' \
and buildingnum = %s and cellnum = %s and roomnum = %s",
strSectionName, strBuildingNum, strCellNum, strRoomNum);
if(this->MessageBox("你真的要刪除該住戶嗎?",
"小區居民管理系統", MB_YESNO) == IDNO)
return;
}
pDoc->DeleteUser(strSql);
AddUsersToTree();
}
void CLeftTreeView::OnUpdateOperateDelete(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 + -