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

📄 tree.cpp

📁 一个实用的GIS系统的系统维护模块
💻 CPP
字号:
// Tree.cpp : implementation file
//

#include "stdafx.h"
#include "yhgl.h"
#include "Tree.h"
#include "Choose.h"

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

#define Max 9999
extern CYhglApp theApp;
int f=0;
CString v[Max];

CString temp1,temp2,temp3,temp4;
/////////////////////////////////////////////////////////////////////////////
// CTree dialog


CTree::CTree(CWnd* pParent /*=NULL*/)
	: CDialog(CTree::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTree)
	m_code = _T("");
	m_fullname = _T("");
	m_shortname = _T("");
	m_type = _T("");
	m_usetype = _T("");
	//}}AFX_DATA_INIT
	DscodeCount=0;
}


void CTree::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTree)
	DDX_Control(pDX, IDCANCEL, m_cancel);
	DDX_Control(pDX, IDOK, m_exit);
	DDX_Control(pDX, IDC_TREE1, m_tree);
	DDX_Text(pDX, IDC_EDIT1, m_code);
	DDX_Text(pDX, IDC_EDIT2, m_fullname);
	DDX_Text(pDX, IDC_EDIT3, m_shortname);
	DDX_Text(pDX, IDC_EDIT4, m_type);
	DDX_Text(pDX, IDC_EDIT5, m_usetype);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTree, CDialog)
	//{{AFX_MSG_MAP(CTree)
	ON_NOTIFY(NM_DBLCLK, IDC_TREE1, OnDblclkTree1)
	ON_NOTIFY(NM_CLICK, IDC_TREE1, OnClickTree1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTree message handlers

//BOOL CTree::Create()
//{
//	return CDialog::Create(CTree::IDD);
//}
//

//void CTree::PostNcDestroy() 
//{
//	if (IsWindow(m_hWnd))
//	{
//		CDialog::PostNcDestroy();
//		delete this;
//	}
//}

void CTree::OnOK() 
{
	if(m_pRecordset->State)
		m_pRecordset->Close();
	
	//DestroyWindow();
	CDialog::OnOK();
}
void CTree::OnCancel()
{
	if(m_pRecordset->State)
		m_pRecordset->Close();
	CDialog::OnCancel();
	//DestroyWindow();
}

void CTree::ShowTree()
{
    HTREEITEM hItem,hSubItem;
	CString sql;
	int a=0;
	try
	{  
		m_pRecordset.CreateInstance("ADODB.Recordset");
		m_pRecordset->Open("SELECT * FROM SDE.TB_DSMETADATA",theApp.m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
	}
	catch(_com_error e)///捕捉异常
	{
		AfxMessageBox("读数据集元数据表失败!");///显示错误信息
		return;
	}

	m_tree.DeleteAllItems();
    m_pRecordset->MoveFirst();
	if(m_pRecordset->BOF)
	  AfxMessageBox("表内数据为空!");
    hItem = m_tree.InsertItem("可以使用的数据集",TVI_ROOT);//在根结点上添加一个父结点

	long recNum;
	m_pRecordset->get_RecordCount(&recNum);
	if (recNum <=0 ) return;
	while(!m_pRecordset->adoEOF)
	{
		vDcode = m_pRecordset->GetCollect("DSCODE");
		if(a==0)
		{
			hSubItem = m_tree.InsertItem((LPCTSTR)(_bstr_t)vDcode,hItem);
		}//在Parent1上添加第一个子结点
		else
		{
            hSubItem = m_tree.InsertItem((LPCTSTR)(_bstr_t)vDcode,hItem,hSubItem);
		}//在Parent1上添加一个子结点,排在Child1_1后面
		v[a]=(LPCTSTR)(_bstr_t)vDcode;
		a++;
        m_pRecordset->MoveNext();///移到下一条记录
	}
    //打开权限组权限设置表
	try
	{
		m_pRecordset1.CreateInstance("ADODB.Recordset");
	    sql.Format("SELECT dscode,Privilege FROM SDE.TB_RoleGroupPrivilege r where r.RoleGroupID=%d",transID);
	    m_pRecordset1->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
	}
	catch(_com_error e)///捕捉异常
	{
		MessageBox("读取TB_RoleGroupPrivilege表失败!");
		OnCancel();
		return;
	}

	if (m_pRecordset1 == NULL) return;
	m_pRecordset1->get_RecordCount(&recNum);
	if (recNum > 0)
	{	
		m_pRecordset1->MoveFirst();
		while(!m_pRecordset1->adoEOF)
		{
		   vDcode = m_pRecordset1->GetCollect(0L);
		   vPrivil = m_pRecordset1->GetCollect(1L);
		   Dscode.Add((LPCTSTR)(_bstr_t)(vDcode));
		   Privil.Add((LPCTSTR)(_bstr_t)(vPrivil));
		   m_pRecordset1->MoveNext();
		   DscodeCount++;
		}
	}
	m_pRecordset1->Close();
	
	f=a;
}

BOOL CTree::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_exit.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_exit.SetBkColor(RGB(242,238,230));
	m_exit.SetTooltipText(_T("退回到先前目录"));
	m_exit.SetRounded(TRUE);
    m_cancel.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
	m_cancel.SetBkColor(RGB(242,238,230));
	m_cancel.SetTooltipText(_T("退出"));
	m_cancel.SetRounded(TRUE);

	ShowTree();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTree::clear()
{
  m_code=_T("");
  m_fullname=_T("");
  m_shortname=_T("");
  m_type=_T("");
  m_usetype=_T("");
  UpdateData(FALSE);
}

//数据集序号 --> 类型描述
CString GetDescriptionFromDsTypeIndex(CString tag)
{
	CString ret;
	if (tag == _T("1")) ret = _T("矢量数据");
	else if (tag == _T("2")) ret = _T("数字高程模型");
	else if (tag == _T("3")) ret = _T("数字正射影像");
	else if (tag == _T("4")) ret = _T("数字栅格图");
	else if (tag == _T("5")) ret = _T("航空影像");
	else if (tag == _T("6")) ret = _T("遥感影像");
	else if (tag == _T("7")) ret = _T("堤防断面数据");
	else ret = _T("未知类型");
	return ret;	
}

void CTree::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
    _variant_t vcode,vfullname,vshortname,vtype;
    HTREEITEM m_hTreeItem;	///定一个用来存放当前项的句柄
	m_hTreeItem = m_tree.GetSelectedItem();	///将返回当前选中的结点的句柄。
	if (m_hTreeItem == NULL) return;

	m_tree.SelectItem(m_hTreeItem); ///设定当前项,BOOL SelectItem( HTREEITEM hItem );将选中指明结点。
	CString S1 = m_tree.GetItemText(m_hTreeItem);	///用GetItemText()函数取得选定项的显示文本:
    if(strcmp(S1,"可以使用的数据集")==0)
	{
        clear();
		return;
	}
	else
	{
		S1="SELECT * FROM SDE.TB_DSMETADATA where DSCODE='"+S1+"'";
		
		m_pRecordset->Close();
		m_pRecordset->Open((_variant_t)S1,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
		m_pRecordset->MoveFirst();
		
		vcode=m_pRecordset->GetCollect("DSCODE");
		vfullname=m_pRecordset->GetCollect("DSFULLNAME");
		vshortname=m_pRecordset->GetCollect("DSSHORTNAME");
		vtype=m_pRecordset->GetCollect("DSDATACLASS");
		
        m_code=(LPCTSTR)(_bstr_t)vcode;
        m_fullname=(LPCTSTR)(_bstr_t)vfullname;
		m_shortname=(LPCTSTR)(_bstr_t)vshortname;
		m_type= GetDescriptionFromDsTypeIndex((LPCTSTR)(_bstr_t)vtype);

		int i=0;
		while(i<DscodeCount)
		{
			if(strcmp(m_code,Dscode[i])==0)
			{
				if(Privil[i]=="1")
				   m_usetype="只读";
				else if(Privil[i]=="2")
				   m_usetype="可读写";
				else
                   m_usetype="没有设置权限";
				break;
			}
			i++;
		}
		if (i==DscodeCount) 
		{
            m_usetype="没有设置权限";
		}
		
		temp1=m_code;
		temp2=m_fullname;
		temp3=m_shortname;
		temp4= m_type;
		
		UpdateData(false);
        *pResult = 0;
	}
	*pResult = 0;
}

void CTree::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	OnClickTree1(pNMHDR,pResult);
}

⌨️ 快捷键说明

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