📄 tree.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 + -