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

📄 lefttreeview.cpp

📁 本程序使用Visual C++6.0编写
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// LeftTreeView.cpp : implementation file
//
#include "stdafx.h"
#include "Sjsys.h"
#include "InputDlg.h"
#include "PropertiesDlg.h"
#include "DeviceEditDlg.h"
#include "MainFrm.h"


#include "LeftTreeView.h"


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

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

IMPLEMENT_DYNCREATE(CLeftTreeView, CTreeView)

CLeftTreeView::CLeftTreeView()
	: CTreeView()
{
	//{{AFX_DATA_INIT(CLeftTreeView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	
}

CLeftTreeView::~CLeftTreeView()
{
		//关闭数据库连接
	if(m_myConnection.IsOpen)
	{
		m_myConnection.Close();
	}
	pConnection=m_myConnection.GetConnection();
}

void CLeftTreeView::DoDataExchange(CDataExchange* pDX)
{
	CTreeView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLeftTreeView)

	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLeftTreeView, CTreeView)
	//{{AFX_MSG_MAP(CLeftTreeView)
	ON_COMMAND(ID_PopUp_New, OnPopUpNew)
	ON_COMMAND(ID_PopUp_Delete, OnPopUpDelete)
	ON_COMMAND(ID_PopUp_Amend, OnPopUpAmend)
	ON_COMMAND(ID_PopUp_Properties, OnPopUpProperties)
	ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
	ON_COMMAND(ID_PopUp_Refresh, OnPopUpRefresh)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

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

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

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

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


void CLeftTreeView::OnDraw(CDC* pDC) 
{
	// TODO: Add your specialized code here and/or call the base class
  // CSjsysDoc * pDoc = GetDocument();
   //ASSERT_VALID(pDoc);
}


void CLeftTreeView::OnInitialUpdate() 
{
	CTreeView::OnInitialUpdate();
    
	// TODO: Add your specialized code here and/or call the base class
		///////////////////////////////////
	//	图标初始化
	//////////////////////////////////
    ImgTree.Create (16,16,ILC_COLOR|ILC_MASK,5,5);//创建图标列表
    ImgTree.Add (AfxGetApp()->LoadIcon (IDI_COMPANY));
	ImgTree.Add (AfxGetApp()->LoadIcon (IDI_DEPARTMENT1)); 
    ImgTree.Add (AfxGetApp()->LoadIcon (IDI_SUBDEPARTMENT));
	ImgTree.Add (AfxGetApp()->LoadIcon (IDI_OFFLINE));
	ImgTree.Add (AfxGetApp()->LoadIcon (IDI_ONLINE));

    //	树形控件初始化
	//////////////////////////////////
	//m_TreeCtr.DeleteAllItems();
	CTreeCtrl &m_TreeCtrl=GetTreeCtrl();
	m_TreeCtrl.SetBkColor(RGB(188,197,230));          //设置背景颜色
	m_TreeCtrl.SetImageList (&ImgTree,TVSIL_NORMAL);  //设置图标
		
	/////////////////////////////////
	//	初始化数据库连接
	/////////////////////////////////
	//从.ini获得数据库配置
	CString Path =_T("");
    GetCurrentDirectory(MAX_PATH,Path.GetBuffer(MAX_PATH)); 
    Path.ReleaseBuffer(); 

	Path=Path+"\\DBConfig.ini";
	::GetPrivateProfileString("DBConfig","Server","Server",Server.GetBuffer(MAX_PATH),MAX_PATH,Path);
	::GetPrivateProfileString("DBConfig","DBName","DBName",DBName.GetBuffer(MAX_PATH),MAX_PATH,Path);
	::GetPrivateProfileString("DBConfig","User","User",User.GetBuffer(MAX_PATH),MAX_PATH,Path);
	::GetPrivateProfileString("DBConfig","Password","Password",Password.GetBuffer(MAX_PATH),MAX_PATH,Path);
    
	
	if(!m_myConnection.Open(Server,User,Password,DBName))
	{
		AfxMessageBox("数据库连接失败!");
	}

	
	::CoInitialize(NULL);
	pDeviceRecordset.CreateInstance(__uuidof(Recordset));
	pDepartmentRecordset.CreateInstance(__uuidof(Recordset));
	pEmployeeRecordset.CreateInstance(__uuidof(Recordset));
	pConnection=m_myConnection.GetConnection();
    UpdateTree();
	
	
}


BOOL CLeftTreeView::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	cs.style |=TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS;
	return CTreeView::PreCreateWindow(cs);
}

void CLeftTreeView::OnPopUpNew() 
{
	// TODO: Add your command handler code here
	//增加子项功能函数
   CTreeCtrl &m_TreeCtrl=GetTreeCtrl();
   HTREEITEM hSel=m_TreeCtrl.GetSelectedItem();//取得选择项句柄
   const DWORD ItemID=m_TreeCtrl.GetItemData(hSel);
   bool  RenameEnable=true;
   if(hSel==NULL) 
   {   
	   AfxMessageBox("未捕捉到任何选中项!");
	   return;//无任何选项则返回
   }
    
   //HTREEITEM RecordParent=m_TreeCtrl.GetParentItem(hSel);
   HTREEITEM NowRoot=m_TreeCtrl.GetParentItem(hSel);   //取得父项句柄
   int i=0; 
   while (NowRoot!=NULL)
   {
	   i++;
       NowRoot=m_TreeCtrl.GetParentItem(NowRoot);
   }
   //HTREEITEM hInsert;   //将要插入的树项 
   CString DepartmentName;   //数据库存入时的部门名	
   //TV_INSERTSTRUCT AddNewItem;
   //AddNewItem.hInsertAfter=TVI_LAST;  //在最后增加
   //AddNewItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽
   CInputDlg  dlg; 
   //如果要新建部门或者部室,并且选中的部室未分类的设备
   if((i==0||i==1)&&(m_TreeCtrl.GetItemText(m_TreeCtrl.GetParentItem(hSel))!="未分类")&&(m_TreeCtrl.GetItemText(hSel)!="未分类"))  
   {
	 if(i==0)
	 {
	    dlg.Set("新建部门对话框");//子对话框的标题
		//AddNewItem.item.iImage=1;
	    //AddNewItem.item.iSelectedImage=1;
	 }
	 if(i==1)
	  {
		 dlg.Set("新建部室对话框");
		 //AddNewItem.item.iImage=2;
	     //AddNewItem.item.iSelectedImage=2;
	  }
	 if(dlg.DoModal()==IDOK)
	 {
	   if(dlg.m_NewName!="")
	   {
		// AddNewItem.hParent=hSel;
		 //char strNewName[50];
        // strcpy(strNewName,dlg.m_NewName);
        // AddNewItem.item.pszText=strNewName;
	     DepartmentName=dlg.m_NewName;
		 //MessageBox(m_TreeCtrl.GetItemText(hSel));
		 try
			{
		      if(pConnection)
			  {
		         SQLStr.Format("select * from Department where Cname='%s'",DepartmentName);
		         pDepartmentRecordset->Open(_bstr_t(SQLStr),
				                   _variant_t(pConnection,true),
								   adOpenDynamic,
								   adLockOptimistic,
								   adCmdText);
				 if(!pDepartmentRecordset->adoEOF)
				 {
				   MessageBox("对不起,该名称已经在本公司使用!");
                   RenameEnable=false;
				 }
				 pDepartmentRecordset->Close(); 
			  }
			}
	        catch(_com_error *e)
			{
		      AfxMessageBox(e->ErrorMessage());
			} 
	 
         if(RenameEnable)
		 {
	     try //将新建的部门或者部室存入数据库
		 {
		      SQLStr="select * from Department";
	          pDepartmentRecordset->Open(_bstr_t(SQLStr),
				                   _variant_t(pConnection,true),
								   adOpenDynamic,
								   adLockOptimistic,
								   adCmdText);
	          pDepartmentRecordset->AddNew();
              pDepartmentRecordset->PutCollect("Name",_variant_t(DepartmentName));    //存入新名称
	          pDepartmentRecordset->PutCollect("Cname",_variant_t(DepartmentName));   //存入新中文名称
	          CString StrID;
			  StrID.Format("%d",m_TreeCtrl.GetItemData(hSel));
			  //MessageBox(StrID);
			  pDepartmentRecordset->PutCollect("Upnodeid",_variant_t(StrID));   //存入所属关系
			  pDepartmentRecordset->Update();
		 }
         catch(_com_error *e)
		 {
	       AfxMessageBox(e->ErrorMessage());
		 }
		 pDepartmentRecordset->Close();
		 //重新显示树项
	     UpdateTree();
		
		 //遍历所有树项,寻找刚才所选中的项,然后将其展开。
		 HTREEITEM hti=m_TreeCtrl.GetChildItem(TVI_ROOT);   
         while(NULL!=hti)   
		 { 
			//MessageBox(m_TreeCtrl.GetItemText(hti));
            if(m_TreeCtrl.GetItemData(hti)==ItemID) 
			{
				m_TreeCtrl.SelectItem(hti);
			    m_TreeCtrl.Expand(hti,TVE_EXPAND);
				return;
			}
			if(m_TreeCtrl.ItemHasChildren(hti))
			{
				
                HTREEITEM  hChildItem=m_TreeCtrl.GetChildItem(hti);
				while (hChildItem != NULL)
				{
				  
				  if(m_TreeCtrl.GetItemData(hChildItem)==ItemID) 
				  {
					 m_TreeCtrl.SelectItem(hChildItem);
			         m_TreeCtrl.Expand(hChildItem,TVE_EXPAND);
					 return;
				  }
				  if(m_TreeCtrl.ItemHasChildren(hChildItem))
				  {
					  HTREEITEM  hSubChildItem=m_TreeCtrl.GetChildItem(hChildItem);
                      while (hSubChildItem != NULL)
					  {
				         if(m_TreeCtrl.GetItemData(hSubChildItem)==ItemID)  
						 {
							m_TreeCtrl.SelectItem(hSubChildItem);
			                m_TreeCtrl.Expand(hSubChildItem,TVE_EXPAND);
							return;
						 }
						hSubChildItem=m_TreeCtrl.GetNextSiblingItem(hSubChildItem);
					  }
				  }
				hChildItem=m_TreeCtrl.GetNextSiblingItem(hChildItem);
				}
			}
				  
           hti=m_TreeCtrl.GetNextSiblingItem(hti);   
		 }
		// MessageBox(m_TreeCtrl.GetItemText(hSel));
		 
	   }
	   }
	   else
		 AfxMessageBox("请确认输入了名称?");
	 }
     
   }
   else //如果要新建设备或者公司
   {
	     MessageBox("该处暂时不支持新建!","提示",MB_OK|MB_ICONINFORMATION);
	     return;
	 /*DepartmentName=m_TreeCtrl.GetItemText(NowRoot);
     AddNewItem.hParent=NowRoot; //设置父项句柄
	 // static int nAddNo=100;//编号大于100为新增数据
     // TCItem.item.lParam=nAddNo++;//索引号增加
     AddNewItem.item.iImage=0;         //正常图标,默认为不在线
     AddNewItem.item.iSelectedImage=0;//选中时图标
	 try   //将新建的设备存入数据库
	 {
		   SQLStr="select * from Device";
		   pDeviceRecordset->Open(_bstr_t(SQLStr),
				                   _variant_t(pConnection,true),
								   adOpenDynamic,
								   adLockOptimistic,
								   adCmdText);
		   pDeviceRecordset->AddNew();
           pDeviceRecordset->PutCollect("Name",_variant_t(dlg.m_NewName));    //存入新部门名称
	       pDeviceRecordset->PutCollect("Cname",_variant_t(dlg.m_NewName));   //存入新部门中文名称
	       pDeviceRecordset->Update();	
	
	 }
	 catch(_com_error *e)
	 {
	     AfxMessageBox(e->ErrorMessage());
	 }
    pDeviceRecordset->Close();*/
	}
	 
}

void CLeftTreeView::OnPopUpDelete() 
{
	// TODO: Add your command handler code here
	CTreeCtrl &m_TreeCtrl=GetTreeCtrl();
	HTREEITEM hSel=m_TreeCtrl.GetSelectedItem();//取得选项句柄;
    if(hSel==NULL) 
	{   
	   AfxMessageBox("未捕捉到任何选中项!");
	   return;//无任何选项则返回
	}
   HTREEITEM NowRoot=m_TreeCtrl.GetParentItem(hSel);   //取得父项句柄
   int i=0; 
   while (NowRoot!=NULL)
   {
	   i++;
       NowRoot=m_TreeCtrl.GetParentItem(NowRoot);
   }
	if(MessageBox("确实要删除吗?","询问",MB_YESNO|MB_ICONINFORMATION)==IDYES)
	{
	  //if(MessageBox("连带数据库中该项一起删除吗?","询问",MB_YESNO|MB_ICONINFORMATION)==IDYES)
	  //{
		if((i!=3)&&(m_TreeCtrl.GetItemText(m_TreeCtrl.GetParentItem(hSel))!="未分类"))//判断是否是设备
		{
			/*if(MessageBox("系统检测到选中项可能含有子项,确定删除?","警告",MB_YESNO|MB_ICONINFORMATION)==IDNO) 
		    return;*/
			if(!m_TreeCtrl.ItemHasChildren(hSel))
			{
			 try
			 {
		      if(pConnection)
			  {
			    SQLStr.Format("delete from Department where CName='%s'",m_TreeCtrl.GetItemText(hSel));
	            //	AfxMessageBox(SQLStr);
			    //执行数据库删除
 		      	m_myConnection.Execute(SQLStr);			
			  }

			 }
	         catch(_com_error *e)
			 {
		      AfxMessageBox(e->ErrorMessage());
			 }
			}
			else
			{
				MessageBox("抱歉,此处含有子项,暂时不支持删除。");
		        return;
			}
		/*}
	   else if (m_TreeCtrl.GetItemText(hSel)=="未分类")
	   {*/
		   
	   }
	   else
	   {
		    try
			{
		      if(pConnection)
			  {
		         SQLStr.Format("delete from Device where Devicename='%s'",m_TreeCtrl.GetItemText(hSel));
		          m_myConnection.Execute(SQLStr);	
			  }
			}
	        catch(_com_error *e)
			{
		      AfxMessageBox(e->ErrorMessage());
			} 
		
	   }
      //AfxMessageBox("删除成功!");
	 //}	
    m_TreeCtrl.DeleteItem(hSel); 
	}
}

void CLeftTreeView::OnPopUpAmend() 
{
	// TODO: Add your command handler code here
   //编辑选中的树项
   CTreeCtrl &m_TreeCtrl=GetTreeCtrl();
   HTREEITEM hSel=m_TreeCtrl.GetSelectedItem();//取得选择项句柄
   if(hSel==NULL) 
   {   
	   AfxMessageBox("未捕捉到任何选中项!");

⌨️ 快捷键说明

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