shixi07621view.cpp

来自「是数据结构实习很好的参考范本」· C++ 代码 · 共 649 行

CPP
649
字号
// shixi07621View.cpp : implementation of the CShixi07621View class
//

#include "stdafx.h"
#include "shixi07621.h"

#include "shixi07621Doc.h"
#include "shixi07621View.h"
#include"DlgQuan.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include"CreateDlg.h"
#include"Graph.h"
#include"math.h"
#include"DeleteDlg.h"
#include"CZhaoDlg.h"
#include"ChJianDlg.h"
#include"CreateDlg.h"
#include"SMDlg.h"
CPoint cun[1000];
//int Quanz[20][20];
int quan=1;
int i=0;
//int dist[100];// 对于不属于S的顶点 ,从始点出发经过S中顶点到达终点的最短路径长度
//int path[100];//到终点的最短路径经过的最后一个顶点
//BOOL s[100];//最短路径已找到的重点 的集合

int js=16;
CPoint jd[3];
int js1=1;
CPoint tj[100];
int tj1=1;
/////////////////////////////////////////////////////////////////////////////
// CShixi07621View

IMPLEMENT_DYNCREATE(CShixi07621View, CView)

BEGIN_MESSAGE_MAP(CShixi07621View, CView)
	//{{AFX_MSG_MAP(CShixi07621View)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(IDM_LINE, OnLine)
	ON_COMMAND(IDM_XSLU, OnXslu)
	ON_COMMAND(IDM_MULU, OnMulu)
	ON_COMMAND(IDM_CLEAR, OnClear)
	ON_COMMAND(IDM_CZHAO, OnCzhao)
	ON_COMMAND(IDM_MAP, OnMap)
	ON_COMMAND(IDM_XSBJ, OnXsbj)
	ON_COMMAND(ID_ELLIPSE, OnEllipse)
	ON_COMMAND(ID_RETANGEL, OnRetangel)
	ON_BN_DOUBLECLICKED(IDCANCEL, OnDoubleclickedCancel)
	ON_COMMAND(IDM_BHAO, OnBhao)
	ON_COMMAND(IDM_SHORT, OnShort)
	ON_COMMAND(IDM_CLEAR1, OnClear1)
	ON_COMMAND(ID_TianJ, OnTianJ)
	ON_COMMAND(IDM_CHJIAN, OnChjian)
	ON_COMMAND(IDM_DELETE, OnDelete)
	ON_COMMAND(IDM_LUJ1, OnLuj1)
	ON_COMMAND(IDM_SM, OnSm)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShixi07621View construction/destruction

CShixi07621View::CShixi07621View()
{
	// TODO: add construction code here
	for(int m1=0;m1<20;m1++)
	  for(int n1=0;n1<20;n1++)
		  Quanz[m1][n1]=1000;
	Quanz[1][3]=Quanz[3][1]=14; Quanz[1][6]=Quanz[6][1]=15;
	Quanz[2][5]=Quanz[5][2]=17;Quanz[2][6]=Quanz[6][2]=18;
	Quanz[3][6]=Quanz[6][3]=23; Quanz[3][7]=Quanz[7][3]=25; Quanz[3][8]=Quanz[8][3]=27;
	Quanz[4][5]=Quanz[5][4]=31; Quanz[4][11]=Quanz[11][4]=24; Quanz[4][12]=Quanz[12][4]=16; 
	Quanz[4][13]=Quanz[13][4]=23;
	Quanz[5][6]=Quanz[6][5]=25; Quanz[5][11]=Quanz[11][5]=19; Quanz[5][12]=Quanz[12][5]=11;
	Quanz[6][7]=Quanz[7][6]=24; Quanz[6][11]=Quanz[11][6]=9;
	Quanz[6][12]=Quanz[12][6]=28;
	Quanz[7][8]=Quanz[8][7]=18; Quanz[7][12]=Quanz[12][7]=33; Quanz[7][15]=Quanz[15][7]=13;
	Quanz[8][9]=Quanz[9][8]=21; Quanz[8][15]=Quanz[15][8]=13;
	Quanz[9][10]=Quanz[10][9]=25; Quanz[9][15]=Quanz[15][9]=16;
	Quanz[11][12]=Quanz[12][11]=17; Quanz[11][13]=Quanz[13][11]=19;
	Quanz[12][13]=Quanz[13][12]=18; Quanz[13][14]=Quanz[14][13]=14;
	Quanz[14][15]=Quanz[15][14]=14;
 
 Node[1].x=450;Node[1].y=30;Node[2].x=151;Node[2].y=90;Node[3].x=700;Node[3].y=72;Node[4].x=57;
 Node[4].y=234;
 Node[5].x=197;Node[5].y=201;Node[6].x=425;Node[6].y=180;Node[7].x=620;Node[7].y=295;
 Node[8].x=730;Node[8].y=198;
 Node[9].x=790;Node[9].y=325;Node[10].x=878;Node[10].y=225;Node[11].x=160;Node[11].y=374;
 Node[12].x=410;Node[12].y=330;
 Node[13].x=189;Node[13].y=501;Node[14].x=460;Node[14].y=560;
 Node[15].x=676;Node[15].y=499;

 

}

CShixi07621View::~CShixi07621View()
{
}

BOOL CShixi07621View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CShixi07621View drawing
#include"Graph.h"
void CShixi07621View::OnDraw(CDC* pDC)
{
	CShixi07621Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
// CGraph a;
// a.draw(pDC);

	switch(Beij)
	{
	case 1:
		OnMap();
		break;		
	case 2:
		OnXsbj();
		break;
	case 3:
	      OnClear1(); 
	   break;
	}

		//Invalidate(TRUE);
	//	if(m_pd2==2)
		
//	pDoc->graph.DrawGraph(pDC);


}

/////////////////////////////////////////////////////////////////////////////
// CShixi07621View printing

BOOL CShixi07621View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CShixi07621View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CShixi07621View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CShixi07621View diagnostics

#ifdef _DEBUG
void CShixi07621View::AssertValid() const
{
	CView::AssertValid();
}

void CShixi07621View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CShixi07621Doc* CShixi07621View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShixi07621Doc)));
	return (CShixi07621Doc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CShixi07621View message handlers

void CShixi07621View::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	cun[i]=point;
	i++;
    CChJianDlg c;
    CClientDC dc(this);
	CDC *pDC=GetDC();
	//CGraph b;
//	b.draw(pDC);
	switch(paint)
	{
	case 1:
		{ 
		 
		  if(IDCANCEL==c.DoModal())
			  break;
		  else
		  { 
		  CPen pen(PS_SOLID,3,RGB(0,0,255));   
		  CPen *oldPen=(CPen *)pDC->SelectObject(&pen);
		  pDC->Ellipse(point.x-20,point.y-20,point.x+20,point.y+20); 
		  pDC->TextOut(point.x-20,point.y-15,c.m_str);
		  Node[js]=point;
		  js++;
		  }

		 break;
		}
		
	case 2:
		{ 
			if(IDCANCEL==c.DoModal())
			  break;
			else
			{
			 CPen pen(PS_SOLID,3,RGB(0,0,255));   
			 CPen *oldPen=(CPen *)pDC->SelectObject(&pen);
			 pDC->Rectangle(point.x-20,point.y-20,point.x+20,point.y+20);
			
			  pDC->TextOut(point.x-20,point.y-15,c.m_str);
			  Node[js]=point;
			  js++;
			}
		break;
		}
	case 3:
		{
		
            jd[js1]=point;
			js1++;
			if(js1==3)
				Quan();
		}
	case 4:
		{
          tj[tj1]=point;
		  tj1++;
		}
		
	}
	CView::OnLButtonDown(nFlags, point);
}



void CShixi07621View::OnLine() 
{
	// TODO: Add your command handler code here
       paint=3;
	  
			
			
/*  for(;;)
 {
	  if(cun[0].x==0)
		  break;
	 if(i<=0||i%2==0&&i>2)
		 break;
     dc.MoveTo(cun[i-1]);
     dc.LineTo(cun[i-2]);

	 CDlgQuan a;
	 a.DoModal();
	 char s[10];
	itoa(a.m_int,s,10);
	CClientDC dc(this);

	dc.TextOut((cun[i-1].x+cun[i-2].x)/2,(cun[i-1].y+cun[i-2].y)/2,s);
	 i=i-2;

  }*/
}

void CShixi07621View::OnXslu() 
{
	// TODO: Add your command handler code here

	CDC *pDC=GetDC();
	CGraph d;
	d.Createluj(pDC);
    m_pd=1;

}

void CShixi07621View::OnMulu() 
{   
	CDC *pDC=GetDC();
	CGraph d;
	d.input(pDC);
	
	m_pd2=2;
	// TODO: Add your command handler code here
	
}

void CShixi07621View::OnClear() 
{
	// TODO: Add your command handler code here
	CDC *pDC=GetDC();
	OnDraw(pDC);
	CGraph a;
	a.clear();
}


void CShixi07621View::OnCzhao() 
{
	CCZhaoDlg b;
	b.DoModal();

	CDC *pDC=GetDC();
		CGraph a;
        a.CZHao(b.m_cz,pDC);
 
	// TODO: Add your command handler code here
	
}

void CShixi07621View::OnMap() 
{
	// TODO: Add your command handler code here
		CDC *pDC=GetDC();
	Beij=1;
	CBitmap bm;
	bm.LoadBitmap(IDB_BITMAP2);
	CBrush b(&bm);
	CRect r(0,0,1024,768);
	pDC->FillRect(&r,&b); 
	     CGraph c;
		 
	    c.draw(pDC);
		if(m_pd==1)
		c.Createluj(pDC);

}

void CShixi07621View::OnXsbj() 
{
	CDC *pDC=GetDC();
	CBitmap bm;
	bm.LoadBitmap(IDB_BITMAP5);
	CBrush b(&bm);
	CRect r(0,0,1024,768);
	pDC->FillRect(&r,&b); 
    Beij=2;
	// TODO: Add your command handler code here
	
}

void CShixi07621View::OnEllipse() 
{
	// TODO: Add your command handler code here
	paint=1;
}

void CShixi07621View::OnRetangel() 
{
	// TODO: Add your command handler code here
	paint=2;
}

void CShixi07621View::Quan()
{
  /*for(int m1=0;m1<20;m1++)
	  for(int n1=0;n1<20;n1++)
		  Quanz[m1][n1]=1000;*/
		CDC *pDC=GetDC();
  CPoint jilu[3];
	 CClientDC dc(this);
	 CDlgQuan a;
	if(IDOK==a.DoModal())
	{
	   int ls1=0;
		int ls2=0;
		 int m=1; 
         int n=1;
	for(;m<js,n<js;m++,n++)
    {
		if((jd[2].x-Node[m].x)*(jd[2].x-Node[m].x)+(jd[2].y-Node[m].y)*(jd[2].y-Node[m].y)<1800)
		{
			jilu[1]=Node[m];ls1=m;
		}
	 if((jd[1].x-Node[n].x)*(jd[1].x-Node[n].x)+(jd[1].y-Node[n].y)*(jd[1].y-Node[n].y)<1800) 
	 {
		 jilu[2]=Node[n];ls2=n;
	 }
	}
	CPen pen(PS_SOLID,3,RGB(120,0,255));   
		 CPen *oldPen=(CPen *)pDC->SelectObject(&pen);
	 pDC->MoveTo(jilu[1]);
	 pDC->LineTo(jilu[2]);
	 if(a.m_int!=0)
	  Quanz[ls1][ls2]=Quanz[ls2][ls1]=a.m_int;
	 else
		  Quanz[ls1][ls2]=Quanz[ls2][ls1]=1000;
	 char s[10];
	 itoa(a.m_int,s,10);
	 pDC->TextOut((jilu[1].x+jilu[2].x)/2,(jilu[1].y+jilu[2].y)/2,s);
	jd[3]=0;
	js1=1;
	m=1;
	n=1;
	}

}

void CShixi07621View::OnDoubleclickedCancel() 
{
	// TODO: Add your control notification handler code here
}

void CShixi07621View::OnBhao() 
{
//ODO: Add your command handler code here
 //   int i=16; 
	char s[10];	
	CClientDC dc(this);
//	if(Beij==4)
//		i=1;
//	else
//		i=16;
	for(int i=1;i<js;i++)
	{
		itoa(i,s,10);
	    dc.TextOut(Node[i].x,Node[i].y,s);

	}
}

void CShixi07621View::OnShort() 
{
	CDC*pDC=GetDC();
	CCreateDlg zs;
	if(zs.DoModal()==IDOK)
	drawpath1(zs.m_n1,zs.m_n2,pDC);
  
	// TODO: Add your command handler code here
	
}

void CShixi07621View::Draw()
{

}
void CShixi07621View::ShortestPath1(int n,int v) 
{
	for(int i=1;i<=n;i++)//初始化
	{
		s[i]=FALSE;
		dist[i]=Quanz[v][i];
		if((i!=v) && (dist[i]<1000))
			path[i]=v;
		else
			path[i]=-1;

	}
	s[v]=TRUE;dist[v]=0;
	for(i=1;i<=n-2;i++)//确定从v开始的n-1条路径
	{
		int u=choose1(n);//选择u,使得对于所有的s[x]=FALSE,dist[u]=最小的dist[x]
		s[u]=TRUE;
		for(int w=1;w<=n;w++)
			if(!s[w])
				if(dist[u]+Quanz[u][w]<dist[w])
				{
					dist[w]=dist[u]+Quanz[u][w];
					path[w]=u;
				}
	}//for(i=0;...)
}

int CShixi07621View::choose1(const int n)
{
	int shortest=1000;
	int u;
	for(int i=1;i<=n;i++)
	{
		if((!s[i])&&(dist[i]<shortest))
		{
			u=i;
			shortest=dist[i];
		}
	}
	return u;

}

/**///////////////////////////////
int dg=0;
void CShixi07621View::drawpath1(int m_start, int m_end, CDC *pDC)
{
	CPoint point1[100];
	int js2=1;
	if(m_start>js-1||m_start<1||m_end>js-1||m_end<1||m_start==dg||m_end==dg)
	{
		pDC->TextOut(300,300,"输入错误!");
	}
	else
	{
	
	CPen pen;
	CPen newpen3,*oldpen=NULL;
	newpen3.CreatePen(PS_SOLID,3,RGB(225,0,0));
	pDC->SelectObject(&newpen3);
	ShortestPath1(js-1,m_start);
	int temp;
	temp=path[m_end];
	while(temp!=m_start)
	{
		point1[js2]=Node[m_end];
		js2++;
	//	pDC->MoveTo (loc[m_end]);	
	//	pDC->LineTo (loc[temp]);
		point1[js2]=Node[temp];
		js2++;
	//	Sleep(1200);
		m_end=path[m_end];
		temp=path[m_end];
	}
	point1[js2]=Node[m_end];
	js2++;
	point1[js2]=Node[temp];

	}
	for(;;)
	{
		if(js2==1)
			break;
		CPen pen(PS_SOLID,3,RGB(255,0,0));   
		CPen *oldPen=(CPen *)pDC->SelectObject(&pen);
      pDC->MoveTo(point1[js2]);
	  pDC->LineTo(point1[js2-1]);
	 
	  js2--; 
	  Sleep(1000);
	}

}

void CShixi07621View::OnClear1() 
{
	// TODO: Add your command handler code here	
	CDC*pDC=GetDC();
		CBitmap bm;
		bm.LoadBitmap(IDB_BITMAP4);
		CBrush b(&bm);
		CRect r(0,0,1024,768);
		pDC->FillRect(&r,&b); 

	Node[100]=0;
	js=1;
	CShixi07621View();
	OnDraw(pDC);
	Beij=3;
}

void CShixi07621View::OnTianJ() 
{
	Beij=4;
	// TODO: Add your command handler code here
	CDC*pDC=GetDC();
	CGraph a;
//	for(int j=1;j<10;j++)
	a.Tianjia(tj[tj1-1].x,tj[tj1-1].y,pDC);
	
}

void CShixi07621View::OnChjian() 
{
	// TODO: Add your command handler code here

	for(int m1=0;m1<20;m1++)
	    for(int n1=0;n1<20;n1++)
		  Quanz[m1][n1]=1000;
		  Node[1000]=0;
		  js=1;
		  	Beij=4;
}

void CShixi07621View::OnDelete() 
{
	CDC*pDC=GetDC();
   CDeleteDlg a;
   if(IDOK==a.DoModal())
	  for(int n1=0;n1<20;n1++)
		  Quanz[a.m_ndl][n1]=1000;
     for(int n2=0;n2<20;n2++)
          Quanz[n2][a.m_ndl]=1000;
	 pDC->TextOut(Node[a.m_ndl].x,Node[a.m_ndl].y,"该建筑已被拆除!");
        dg=a.m_ndl;
	// TODO: Add your command handler code here
	
}

void CShixi07621View::OnLuj1() 
{

	CDC*pDC=GetDC();
	
         	CBrush m_brush;
            m_brush.CreateSolidBrush(RGB(255,0,0));
			pDC->SetTextColor(RGB(0,0,255));
			
	     CPen pen(PS_SOLID,3,RGB(200,0,255));   
		 CPen *oldPen=(CPen *)pDC->SelectObject(&pen);

for(int m=1;m<js;m++)
{
	for(int n=1;n<js;n++)
	{
		if(Quanz[m][n]!=1000)
		{
			
			pDC->MoveTo(Node[m]);
			pDC->LineTo(Node[n]); 
			
			char s[10];
			itoa(Quanz[m][n],s,10);
			pDC->TextOut((Node[m].x+Node[n].x)/2,(Node[m].y+Node[n].y)/2,s);
		}
		else 
			continue;
	}
	// TODO: Add your command handler code here
	
}
}

void CShixi07621View::OnSm() 
{
	// TODO: Add your command handler code here
//	CSMDlg a;
//	a.DoModal();

}

⌨️ 快捷键说明

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