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

📄 lefttreeview.cpp

📁 Visual+C+++课程设计案例精编(附书代码),有通讯录,聊天程序等源吗,对初学者很有帮助.
💻 CPP
字号:
// LeftTreeView.cpp : implementation file
//

#include "stdafx.h"
#include "HMS.h"
#include "LeftTreeView.h"
#include "Mainfrm.h"
#include "RoomTypeDlg.h"
#include "RoomDlg.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_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
	ON_COMMAND(ID_TYPE_ADD, OnTypeAdd)
	ON_COMMAND(ID_TYPE_MODIFY, OnTypeModify)
	ON_COMMAND(ID_TYPE_DEL, OnTypeDel)
	ON_COMMAND(ID_ROOM_ADD, OnRoomAdd)
	ON_COMMAND(ID_ROOM_MODIFY, OnRoomModify)
	ON_COMMAND(ID_ROOM_DEL, OnRoomDel)
	//}}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::AddRoomTypeToTree(CString strTypeName)
{
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	HTREEITEM hRootItem = pCtrl->GetRootItem();
	if(hRootItem)
	{
		while(hRootItem)
		{
			CString strItemText = pCtrl->GetItemText(hRootItem);
			if(strItemText == strTypeName)
				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)strTypeName;
	HTREEITEM hSectionItem = pCtrl->InsertItem(&TCItem);
//	pCtrl->SortChildren(TVI_ROOT);
	return hSectionItem;
}

void CLeftTreeView::FullfillTree()
{
	//清空
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	pCtrl->DeleteAllItems();
	//添加房间类型
	_variant_t Holder, strQuery;
    strQuery = "select TypeID,TypeName from roomtype order by TypeID";
	theApp.ADOExecute(theApp.m_pRs, strQuery);
    int iCount = theApp.m_pRs->GetRecordCount();
	if ( 0==iCount ) return;
	
    CString str;
	theApp.m_pRs->MoveFirst();
	for(int i=0; i<iCount; i++)
	{
		 // Get typename
        Holder = theApp.m_pRs->GetCollect("TypeName");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		AddRoomTypeToTree(str);			
		theApp.m_pRs->MoveNext();
	}

	//添加房间
    strQuery = "select roomtype.TypeName,rooms.RoomNO from rooms,roomtype where rooms.TypeID=roomtype.TypeID";
	theApp.ADOExecute(theApp.m_pRs, strQuery);
	iCount = theApp.m_pRs->GetRecordCount();
	if ( 0==iCount ) return;

	
    CString strTypeName,strRoomNo;
	theApp.m_pRs->MoveFirst();
	for(i=0; i<iCount; i++)
	{
		 // Get typename
        Holder = theApp.m_pRs->GetCollect("TypeName");
	    strTypeName = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
        //Get RoomNo
		Holder = theApp.m_pRs->GetCollect("RoomNO");
	    strRoomNo = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;

		AddRoom(strTypeName,strRoomNo);		
		theApp.m_pRs->MoveNext();
	}

	//补漏
	strQuery="select TypeName from roomtype where TypeID not in(select distinct TypeID from rooms)";
	theApp.ADOExecute(theApp.m_pRs,strQuery);
	iCount = theApp.m_pRs->GetRecordCount();
	if ( 0==iCount ) return;
	

	theApp.m_pRs->MoveFirst();
	for(i=0; i<iCount; i++)
	{
		 // Get typename
        Holder = theApp.m_pRs->GetCollect("TypeName");
	    strTypeName = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
      
		AddRoom(strTypeName,"...");		
		theApp.m_pRs->MoveNext();
	}

}
void CLeftTreeView::AddRoom(CString strRoomType, CString strRoomNo)
{
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	HTREEITEM hRootItem = pCtrl->GetRootItem();
	if(hRootItem)
	{
		while(hRootItem)
		{
			CString strItemText = pCtrl->GetItemText(hRootItem);
			if(strItemText == strRoomType)
				break;
			hRootItem = pCtrl->GetNextSiblingItem(hRootItem);
		}
		AddRoomToTree(hRootItem,strRoomNo);
	}
}
HTREEITEM CLeftTreeView::AddRoomToTree(HTREEITEM hTypeItem, CString strRoomNum)
{
	if(hTypeItem == NULL)
		return NULL;
	CTreeCtrl* pCtrl = &GetTreeCtrl();
	if(pCtrl->ItemHasChildren(hTypeItem))
	{
		HTREEITEM hItem = pCtrl->GetChildItem(hTypeItem);
		while(hItem)
		{
			CString strItemText = pCtrl->GetItemText(hItem);
			if(strItemText == strRoomNum)
				return hItem;
			hItem = pCtrl->GetNextSiblingItem(hItem);
		}
	}
	TV_INSERTSTRUCT TCItem;//插入数据项数据结构
	TCItem.hParent = hTypeItem;
	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)strRoomNum;
	HTREEITEM hRoomItem = pCtrl->InsertItem(&TCItem);

//	pCtrl->SortChildren(hTypeItem);
	return hRoomItem;
}

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

	//为树视图创建图标连表
	CHMSApp* pApp = (CHMSApp*)AfxGetApp();
	CTreeCtrl* pTreeCtrl = &GetTreeCtrl();
	m_ImageList.Create(16,16,ILC_COLOR16,4,4);
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_ROOMTYPE));
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_ROOM));
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_ROOM));
	m_ImageList.Add(pApp->LoadIcon(IDI_ICON_USER));
	pTreeCtrl->SetImageList(&m_ImageList,TVSIL_NORMAL);

	//将生成树中
	FullfillTree();
//	pTreeCtrl->SortChildren(TVI_ROOT);
	m_hHitItem=pTreeCtrl->GetFirstVisibleItem();
	// TODO: Add your specialized code here and/or call the base class
	
}

void CLeftTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{

	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// 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(ROOMTYPEVIEW);		
		return;
	}

	//判断选择项在树中的位置
	HTREEITEM hParentItem = pCtrl->GetParentItem(hSelItem);
	CString strSql,strSectionName,strBuildingNum,strCellNum,strRoomNum;
	if(hParentItem == NULL)
	{
		pFrame->SwitchToView(ROOMTYPEVIEW);
		return;	

	}		
	else
	{
		pFrame->SwitchToView(USERLISTVIEW);
		return;

	}

	*pResult = 0;
}

void CLeftTreeView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{

	CTreeCtrl &CTree=GetTreeCtrl();
	CMenu menu,*pSubMenu;
	
	if(CTree.GetParentItem(m_hHitItem))
	{
		menu.LoadMenu(IDR_MENU_ROOM);
		pSubMenu=menu.GetSubMenu(0);
		CPoint oPoint;
		GetCursorPos(&oPoint);
		pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this);	

	}
	else
	{		
		menu.LoadMenu(IDR_MENU_ROOMTYPE);
		pSubMenu=menu.GetSubMenu(0);
		CPoint oPoint;
		GetCursorPos(&oPoint);
		pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this);
	}
	
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}

void CLeftTreeView::OnTypeAdd() 
{
	operation=1;
	CRoomTypeDlg dlg;
	dlg.DoModal();
	// TODO: Add your command handler code here
	
}

void CLeftTreeView::OnTypeModify() 
{
	operation=2;
	CRoomTypeDlg dlg;
	dlg.DoModal();
	// TODO: Add your command handler code here
	
}

void CLeftTreeView::OnTypeDel() 
{
	operation=3;
	CRoomTypeDlg dlg;
	dlg.DoModal();
	// TODO: Add your command handler code here
	
}

void CLeftTreeView::OnRoomAdd() 
{
	operation=1;
	CRoomDlg dlg;
	dlg.DoModal();
	// TODO: Add your command handler code here
	
}

void CLeftTreeView::OnRoomModify() 
{
	operation=2;
	CRoomDlg dlg;
	dlg.DoModal();

	// TODO: Add your command handler code here
	
}

void CLeftTreeView::OnRoomDel() 
{
	operation=3;
	CRoomDlg dlg;
	dlg.DoModal();
	// TODO: Add your command handler code here
	
}


⌨️ 快捷键说明

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