📄 tree.cpp
字号:
// Tree.cpp : implementation file
//
#include "stdafx.h"
#include "draw.h"
#include "Tree.h"
#include "afxcview.h"
#include "BrowseDlg.h"
#include "DrawDoc.h"
#include "MainFrm.h"
#include "LinkDlg.h"
#include "LinkDataSet.h"
#include "DrawView.h"
#include "PositionDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CDrawView *p_View;
CTree * pTree;
/////////////////////////////////////////////////////////////////////////////
// CTree
IMPLEMENT_DYNCREATE(CTree, CTreeView)
CTree::CTree()
{
CDrawApp * pApp=(CDrawApp *)AfxGetApp();
pTree=this;
m_TreeWide=0;
m_TreeHeight=0;
pBrowseDlg=NULL;
SelID=new CString[3000];
m_PlSelType=0;
pLinkSet=NULL;
pLinkDlg=NULL;
m_TreeImage.Create( IDB_TreeImage,20,1,ILC_COLOR8);
n_SelID=0;
/* CDocTemplate * pTemplate=pApp->GetDocTemplate();
ASSERT_VALID(pTemplate);
POSITION pos=pTemplate->GetFirstDocPosition();
POSITION &pos1=pos;
CDrawDoc * pDoc=(CDrawDoc *)pTemplate->GetNextDoc(pos1);
m_pUpWaterSet=&pDoc->m_UpWaterSet;
*/
}
CTree::~CTree()
{
delete pLinkDlg;
delete pLinkSet;
delete pBrowseDlg;
delete[] SelID;
}
BEGIN_MESSAGE_MAP(CTree, CTreeView)
//{{AFX_MSG_MAP(CTree)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTree drawing
void CTree::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
//CBrush* pOldBrush=pDC->SelectObject(&brush); //选中画刷
//pDC->PatBlt(0,0,m_TreeWide,m_TreeHeight,PATCOPY); //填充屏幕
//pDC->SelectObject(pOldBrush);
}
/////////////////////////////////////////////////////////////////////////////
// CTree diagnostics
#ifdef _DEBUG
void CTree::AssertValid() const
{
CTreeView::AssertValid();
}
void CTree::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTree message handlers
int CTree::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTreeView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CTreeCtrl& tc = GetTreeCtrl();
// Set tree control styles
long style = GetWindowLong(tc.m_hWnd,GWL_STYLE);
style |= (TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS |
TVS_SHOWSELALWAYS | TVS_DISABLEDRAGDROP);
SetWindowLong(tc.m_hWnd,GWL_STYLE,style);
tc.SetBkColor(RGB(248,250,160));
tc.SetImageList(&m_TreeImage,TVSIL_NORMAL);
// Insert some items
HTREEITEM h = tc.InsertItem("上水管理");
tc.SetItemImage(h,0,true );
HTREEITEM h1=tc.InsertItem("上水信息",h);
tc.SetItemImage(h1,0,true );
h1=tc.InsertItem("上水图形连接",h);
tc.SetItemImage(h1,0,true );
h1=tc.InsertItem("鼠标操作",h);
tc.SetItemImage(h1,0,true );
HTREEITEM h2=tc.InsertItem("点选查看上水信息", h1);
tc.SetItemImage(h2,0,true );
h2=tc.InsertItem("圆查上水信息", h1);
tc.SetItemImage(h2,0,true );
h2=tc.InsertItem("多边形查上水信息", h1);
tc.SetItemImage(h2,0,true );
h1=tc.InsertItem("上水管快速定位",h);
tc.SetItemImage(h1,0,true );
tc.Expand(h,TVE_EXPAND);
tc.SelectItem(h);
h = tc.InsertItem("下水管理");
tc.SetItemImage(h,0,true );
h1=tc.InsertItem("下水信息",h);
tc.SetItemImage(h1,0,true );
h1=tc.InsertItem("下水图形连接",h);
tc.SetItemImage(h1,0,true );
h1=tc.InsertItem("鼠标操作",h);
tc.SetItemImage(h1,0,true );
h2=tc.InsertItem("点选查看下水信息", h1);
tc.SetItemImage(h2,0,true );
h2=tc.InsertItem("圆查下水信息", h1);
tc.SetItemImage(h2,0,true );
h2=tc.InsertItem("多边形查下水信息", h1);
tc.SetItemImage(h2,0,true );
h1=tc.InsertItem("下水管快速定位",h);
tc.SetItemImage(h1,0,true );
tc.Expand(h,TVE_EXPAND);
h = tc.InsertItem("电力管理");
tc.SetItemImage(h,0,true );
h1=tc.InsertItem("电力信息",h);
tc.SetItemImage(h1,0,true );
h1=tc.InsertItem("电力图形连接",h);
tc.SetItemImage(h1,0,true );
h1=tc.InsertItem("鼠标操作",h);
tc.SetItemImage(h1,0,true );
h2=tc.InsertItem("点选查看电力信息", h1);
tc.SetItemImage(h2,0,true );
h2=tc.InsertItem("圆查电力信息", h1);
tc.SetItemImage(h2,0,true );
h2=tc.InsertItem("多边形查电力信息", h1);
tc.SetItemImage(h2,0,true );
h1=tc.InsertItem("电力管线快速定位",h);
tc.SetItemImage(h1,0,true );
tc.Expand(h,TVE_EXPAND);
tc.SetTextColor(RGB(12,12,255));
return 0;
}
void CTree::OnSize(UINT nType, int cx, int cy)
{
CTreeView::OnSize(nType, cx, cy);
m_TreeWide=cx;
m_TreeHeight=cy;
}
BOOL CTree::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
//CBrush brush(RGB(23,135,66));//p_GraphPara->GetColor(m_bColor)); //得到画刷
//CBrush* pOldBrush=pDC->SelectObject(&brush); //选中画刷
//pDC->PatBlt(0,0,m_TreeWide,m_TreeHeight,PATCOPY); //填充屏幕
//pDC->SelectObject(pOldBrush);
//return true;
return CTreeView::OnEraseBkgnd(pDC);
}
void CTree::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CDrawDoc * pDoc=(CDrawDoc *)GetDocument();
CTreeCtrl& tc = GetTreeCtrl();
HTREEITEM node =tc.GetSelectedItem();
CString strType = tc.GetItemText(node);
if(strType.Compare("上水信息")==0 || strType.Compare("下水信息")==0 || strType.Compare("电力信息")==0 )
{
if(!pBrowseDlg) //如果对话框不存在,产生对话框
{
pBrowseDlg=new CBrowseDlg(NULL);
ASSERT(pBrowseDlg);
}
if(strType.Compare("上水信息")==0 )
pBrowseDlg->m_type=1;
else if( strType.Compare("下水信息")==0)
pBrowseDlg->m_type=2;
else if( strType.Compare("电力信息")==0)
pBrowseDlg->m_type=3;
//如果对话框没有打开
if(!(pBrowseDlg->IsOpen()))
{
pBrowseDlg->Create(IDD_BROWSE,NULL);
}
else //在对话框显示当前管线类型的数据
{
pBrowseDlg->m_ID="";
pBrowseDlg->InitDialog();
}
//如果对话框当前不可见
if(!(pBrowseDlg->IsVisible()))
{
pBrowseDlg->ShowWindow(SW_RESTORE); //使对话框可见
}
if(pBrowseDlg->IsIconic())
pBrowseDlg->ShowWindow(SW_RESTORE);
}
if(strType.Compare("上水图形连接")==0 || strType.Compare("下水图形连接")==0 || strType.Compare("电力图形连接")==0 )
{
if(!pLinkSet)
{
pLinkSet=new CLinkDataSet(&((CDrawApp*) AfxGetApp())->m_pdatabase);
}
if(strType.Compare("上水图形连接")==0)
{
if(!pBrowseDlg)
{
AfxMessageBox("请打开上水信息表,并选择一条记录");
return;
}
if(pBrowseDlg->m_type!=1 ||!(pBrowseDlg->IsOpen())||!(pBrowseDlg->IsWindowVisible()))
{
AfxMessageBox("请打开上水信息表,并选择一条记录");
return;
}
if(pBrowseDlg->m_ID=="")
{
AfxMessageBox("请选择一条记录");
return;
}
pLinkDlg=new CLinkDlg( pDoc, pLinkSet,pBrowseDlg->m_ID,NULL);
pLinkDlg->m_type=1;
}
else if(strType.Compare("下水图形连接")==0)
{
if(!pBrowseDlg )
{
AfxMessageBox("请打开下水信息表,并选择一条记录");
return;
}
if( pBrowseDlg->m_type!=2 || !(pBrowseDlg->IsOpen())||!(pBrowseDlg->IsWindowVisible()))
{
AfxMessageBox("请打开下水信息表,并选择一条记录");
return;
}
if(pBrowseDlg->m_ID=="")
{
AfxMessageBox("请选择一条记录");
return;
}
pLinkDlg=new CLinkDlg( pDoc, pLinkSet,pBrowseDlg->m_ID,NULL);
pLinkDlg->m_type=2;
}
else if(strType.Compare("电力图形连接")==0 )
{
if(!pBrowseDlg )
{
AfxMessageBox("请打开电力信息表,并选择一条记录");
return;
}
if( pBrowseDlg->m_type!=3 || !(pBrowseDlg->IsOpen())||!(pBrowseDlg->IsWindowVisible()))
{
AfxMessageBox("请打开电力信息表,并选择一条记录");
return;
}
if(pBrowseDlg->m_ID=="")
{
AfxMessageBox("请选择一条记录");
return;
}
pLinkDlg=new CLinkDlg( pDoc, pLinkSet,pBrowseDlg->m_ID,NULL);
pLinkDlg->m_type=3;
}
ASSERT(pLinkDlg);
pLinkDlg->DoModal();
}
if(strType.Compare("多边形查上水信息")==0 || strType.Compare("多边形查下水信息")==0 || strType.Compare("多边形查电力信息")==0 )
{
if(strType.Compare("多边形查上水信息")==0)
m_PlSelType=1;
if(strType.Compare("多边形查下水信息")==0)
m_PlSelType=2;
if(strType.Compare("多边形查电力信息")==0)
m_PlSelType=3;
p_View->DispStatus("请用鼠标点中多边形起点选择");
p_View->m_DrawCurrent=84; //标识进行窗口选择
p_View->PushNumb=0;
::SetClassLong(p_View->m_hWnd, GCL_HCURSOR, (long)(p_View->m_hcurCross));
}
if(strType.Compare("圆查上水信息")==0 || strType.Compare("圆查下水信息")==0 || strType.Compare("圆查电力信息")==0 )
{
if(strType.Compare("圆查上水信息")==0)
m_PlSelType=1;
if(strType.Compare("圆查下水信息")==0)
m_PlSelType=2;
if(strType.Compare("圆查电力信息")==0)
m_PlSelType=3;
p_View->DispStatus("请用鼠标点中多边形起点选择");
p_View->m_DrawCurrent=74; //标识进行窗口选择
p_View->PushNumb=0;
::SetClassLong(p_View->m_hWnd, GCL_HCURSOR, (long)(p_View->m_hcurCross));
}
if(strType.Compare("点选查看上水信息")==0 || strType.Compare("点选查看下水信息")==0 || strType.Compare("点选查看电力信息")==0 )
{
if(strType.Compare("点选查看上水信息")==0)
m_PlSelType=1;
if(strType.Compare("点选查看下水信息")==0)
m_PlSelType=2;
if(strType.Compare("点选查看电力信息")==0)
m_PlSelType=3;
p_View->DispStatus("请用鼠标点中需选择的图形元素");
p_View->m_DrawCurrent=100; //标识进行图形选中操作
p_View->PushNumb=0;
::SetClassLong(p_View->m_hWnd, GCL_HCURSOR, (long)(p_View->m_hcurCross));
}
if(strType.Compare("上水管快速定位")==0 || strType.Compare("下水管快速定位")==0 || strType.Compare("电力管线快速定位")==0 )
{
CPositionDlg Dlg;
if(strType.Compare("上水管快速定位")==0)
Dlg.m_type=1;
if(strType.Compare("下水管快速定位")==0)
Dlg.m_type=2;
if(strType.Compare("电力管线快速定位")==0)
Dlg.m_type=3;
Dlg.DoModal();
}
CTreeView::OnLButtonDblClk(nFlags, point);
}
void CTree::ShowSelData()
{
CDrawDoc * pDoc =(CDrawDoc *)GetDocument();
n_SelID=0;
CString strRecordID;
CString strElementID;
CString strGraphID;
CString & strRecordID1=strRecordID;
CString & strGraphID1=strGraphID;
CString & strElementID1=strElementID;
if(!pLinkSet)
pLinkSet=new CLinkDataSet(&((CDrawApp*) AfxGetApp())->m_pdatabase);
if(pLinkSet->IsOpen())
pLinkSet->Close();
pLinkSet->Open();
pLinkSet->MoveFirst();
while(!pLinkSet->IsEOF())
{
pLinkSet->GetFieldValue("record_id",strRecordID1);
pLinkSet->GetFieldValue("element_id",strElementID1);
pLinkSet->GetFieldValue("graph_id",strGraphID1);
for(int i=0;i<pDoc->n_GraphSelect;i++)
{
if(pDoc->GraphSelect[i].Lb!=atoi(strGraphID))
continue;
if(pDoc->GraphSelect[i].pbh==atoi(strElementID))
{
SelID[n_SelID++]=strRecordID;
break;
}
}
pLinkSet->MoveNext();
}
pLinkSet->Close();
if(n_SelID>0)//如果这些选择图形对应有记录
{
if(!pBrowseDlg) //如果对话框不存在,产生对话框
{
pBrowseDlg=new CBrowseDlg(NULL);
ASSERT(pBrowseDlg);
}
switch(m_PlSelType)
{
case 1: pBrowseDlg->m_type=1;break;
case 2: pBrowseDlg->m_type=2;break;
case 3: pBrowseDlg->m_type=3;break;
default:;
}
//如果对话框没有打开
if(!(pBrowseDlg->IsOpen()))
{
pBrowseDlg->bSelect=TRUE;
pBrowseDlg->Create(IDD_BROWSE,NULL);
}
else //在对话框显示当前管线类型的数据
{
pBrowseDlg->m_ID="";
pBrowseDlg->bSelect=TRUE;
pBrowseDlg->InitDialog();
}
//如果对话框当前不可见
if(!(pBrowseDlg->IsVisible()))
{
pBrowseDlg->ShowWindow(SW_RESTORE); //使对话框可见
}
if(pBrowseDlg->IsIconic())
pBrowseDlg->ShowWindow(SW_RESTORE);
}
else //没有对应记录
if(pBrowseDlg)
if(pBrowseDlg->m_hWnd)
if(pBrowseDlg->IsWindowVisible())
pBrowseDlg->ShowWindow(SW_HIDE);//隐藏对话框
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -