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 + -
显示快捷键?