📄 lefttreeview.cpp
字号:
// 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 + -