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

📄 tree.cpp

📁 VC做的矢量画图程序!
💻 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 + -