📄 demprimview.cpp
字号:
// DemPrimView.cpp : implementation file
//
#include "stdafx.h"
#include "AlgorithmicDesign.h"
#include "DemPrimView.h"
#include "MainFrm.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDemPrimView
IMPLEMENT_DYNCREATE(CDemPrimView, CListView)
CDemPrimView::CDemPrimView()
{
m_nodenumber=0;
}
CDemPrimView::~CDemPrimView()
{
m_nodenumber=0;
}
BEGIN_MESSAGE_MAP(CDemPrimView, CListView)
//{{AFX_MSG_MAP(CDemPrimView)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemPrimView drawing
void CDemPrimView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CDemPrimView diagnostics
#ifdef _DEBUG
void CDemPrimView::AssertValid() const
{
CListView::AssertValid();
}
void CDemPrimView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDemPrimView message handlers
void CDemPrimView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CListView::OnInitialUpdate();
CListCtrl& theCtrl = GetListCtrl();
theCtrl.InsertColumn(0," 演示 ",LVCFMT_CENTER,699);
DWORD dwStype=GetWindowLong(theCtrl.GetSafeHwnd(),GWL_STYLE);
dwStype&=~LVS_TYPEMASK; //Remove the current stype flags
dwStype|=LVS_REPORT; //Add the List stype
dwStype|=LVS_SHOWSELALWAYS;
dwStype|=LVS_NOLABELWRAP;
SetWindowLong(theCtrl.GetSafeHwnd(),GWL_STYLE,dwStype); //Set it back into the list view
COLORREF clrBk =RGB(150, 175, 230);
theCtrl.SetBkColor( clrBk);
theCtrl.SetTextBkColor(clrBk);
m_nodenumber=0;
}
void CALLBACK CDemPrimView::OnTimerDrawInit(HWND hWnd,UINT nMsg,UINT nIDEvent,DWORD dwTime)
{
CMainFrame* pMainFrame =(CMainFrame*)::AfxGetMainWnd();
CDemPrimView *pWnd;
pWnd=(CDemPrimView*)(pMainFrame->pMintreegreedyFrame->p_DemolistView);
CRect recttone;
CBrush br2(RGB(150, 175, 230));
//this->GetClientRect(&recttone);
recttone.left=0;
recttone.right=680;
recttone.top=20;
recttone.bottom=680;
CDC*pdc=pWnd->GetDC();
pdc->FillRect(&recttone,&br2);
pWnd->KillTimer(nIDEvent);
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,255,255));
CPen*p=pdc->SelectObject(&pen);
pdc->MoveTo(400,10);
pdc->LineTo(400,500);
pdc->MoveTo(0,520);
pdc->LineTo(680,520);
pdc->MoveTo(50,540);
pdc->LineTo(150,540);
pdc->MoveTo(50,540);
pdc->LineTo(50,560);
pdc->MoveTo(100,570);
pdc->LineTo(150,570);
pdc->MoveTo(100,570);
pdc->LineTo(100,590);
pdc->MoveTo(75,600);
pdc->LineTo(150,600);
pdc->MoveTo(75,600);
pdc->LineTo(75,620);
pen.CreatePen(PS_SOLID,1,RGB(0,125,255));
p=pdc->SelectObject(&pen);
pdc->MoveTo(50,560);
pdc->LineTo(150,560);
pdc->MoveTo(150,540);
pdc->LineTo(150,560);
pdc->MoveTo(100,590);
pdc->LineTo(150,590);
pdc->MoveTo(150,570);
pdc->LineTo(150,590);
pdc->MoveTo(75,620);
pdc->LineTo(150,620);
pdc->MoveTo(150,600);
pdc->LineTo(150,620);
CBrush br3;
br3.CreateSolidBrush(RGB(50,150,0));
pdc->SetBkColor(RGB(150, 175, 230));
CString m_str="closedge[..]";
pdc->TextOut(65,542,m_str);
m_str="vex";
pdc->TextOut(115,572,m_str);
m_str="lowcost";
pdc->TextOut(90,602,m_str);
for(int i=0;i<pWnd->m_nodenumber;i++)
{
br3.CreateSolidBrush(RGB(0,255,255));
pdc->SetBkColor(RGB(0, 0 ,0));
CRect rect;
rect.top=540;
rect.bottom=560;
rect.left=160+40*i;
rect.right=190+40*i;
pdc->FillRect(&rect,&br3);
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(0 ,255, 255));
m_str.Format("%d",i+1);
pdc->TextOut(165+40*i,542,m_str);
}
for( i=0;i<pWnd->m_nodenumber;i++)
{
br3.CreateSolidBrush(RGB(125,255,125));
pdc->SetBkColor(RGB(0, 0 ,0));
CRect rect;
rect.top=570;
rect.bottom=590;
rect.left=160+40*i;
rect.right=190+40*i;
pdc->FillRect(&rect,&br3);
}
for( i=0;i<pWnd->m_nodenumber;i++)
{
br3.CreateSolidBrush(RGB(255,255,255));
pdc->SetBkColor(RGB(0, 0 ,0));
CRect rect;
rect.top=600;
rect.bottom=620;
rect.left=160+40*i;
rect.right=190+40*i;
pdc->FillRect(&rect,&br3);
}
int tonumber=pWnd->m_nodenumber;
if(tonumber<=0)
return;
for( i=0;i<pWnd->m_nodenumber;i++)
{
CBrush br2(RGB(0,255,0));
pdc->SelectObject(&br2);
CRect rect2;
double m_num=2*3.1415926*i/tonumber;
int m_x=(int)(200+150*(cos(m_num)));
int m_y=(int)(240+150*(sin(m_num)));
rect2.left=m_x-15;
rect2.right=m_x+15;
rect2.top=m_y-15;
rect2.bottom=m_y+15;
pdc->Ellipse(&rect2);
CBrush br3;
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(0,255,0));
char c='A'+i;
CString m_str;
m_str.Format("%c",c);
pdc->TextOut(m_x-3,m_y-8,m_str);
}
for(i=0;i<tonumber;i++)
for(int j=i;j<tonumber;j++)
{
if(pWnd->gn[i][j]>0)
{
//AfxMessageBox("lyh");
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
CPen*p=pdc->SelectObject(&pen);
double m_num=2*3.1415926*i/tonumber;
int m_x1=(int)(200+150*(cos(m_num)));
int m_y1=(int)(240+150*(sin(m_num)));
m_num=2*3.1415926*j/tonumber;
int m_x2=(int)(200+150*(cos(m_num)));
int m_y2=(int)(240+150*(sin(m_num)));
pdc->MoveTo(m_x1,m_y1);
pdc->LineTo(m_x2,m_y2);
CBrush br3;
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(150, 175, 230));
CString m_str;
m_str.Format("%.1f",pWnd->gn[i][j]);
m_x1=2*m_x1/5+3*m_x2/5;
m_y1=(2*m_y1+3*m_y2)/5;
pdc->TextOut(m_x1-5,m_y1-10,m_str);
}
}
for( i=0;i<pWnd->m_nodenumber;i++)
{
CBrush br3;
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(150, 175, 230));
char c='A'+i;
CString m_str;
m_str.Format("%c",c);
pdc->TextOut(540-tonumber*10-20,250-tonumber*10+i*20,m_str);
pdc->TextOut(540-tonumber*10+i*20+10,250-tonumber*10-20,m_str);
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,255,255));
CPen*p=pdc->SelectObject(&pen);
pdc->MoveTo(540-tonumber*10-5,250-tonumber*10+5);
pdc->LineTo(540-tonumber*10-5,250+tonumber*10-5);
pdc->MoveTo(540-tonumber*10-5,250-tonumber*10+5);
pdc->LineTo(540-tonumber*10-5+7,250-tonumber*10+5-7);
pdc->MoveTo(540-tonumber*10-5,250+tonumber*10-5);
pdc->LineTo(540-tonumber*10-5+7,250+tonumber*10-5+7);
pdc->MoveTo(540+tonumber*10-5+20,250-tonumber*10+5);
pdc->LineTo(540+tonumber*10-5+20,250+tonumber*10-5);
pdc->MoveTo(540+tonumber*10-5+20,250-tonumber*10+5);
pdc->LineTo(540+tonumber*10-5+20+7-14,250-tonumber*10+5-7);
pdc->MoveTo(540+tonumber*10+20-5,250+tonumber*10-5);
pdc->LineTo(540+tonumber*10+20-5+7-14,250+tonumber*10-5+7);
}
for(i=0;i<tonumber;i++)
for(int j=0;j<tonumber;j++)
{
CBrush br3;
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(150, 175, 230));
int c=(int)pWnd->gn[i][j];
CString m_str;
m_str.Format("%d",c);
pdc->TextOut(540-tonumber*10+i*20+10,250-tonumber*10+j*20,m_str);
}
}
void CDemPrimView::SetInitTimer()
{
SetTimer(1,100,OnTimerDrawInit);
}
void CDemPrimView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CListView::OnPrint(pDC, pInfo);
}
void CDemPrimView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CListView::OnPaint() for painting messages
}
void CDemPrimView::SetVex(int number, CString str)
{
CDC*pdc=GetDC();
CBrush br3;
br3.CreateSolidBrush(RGB(125,255,125));
pdc->SetBkColor(RGB(0, 0 ,0));
CRect rect;
rect.top=570;
rect.bottom=590;
rect.left=160+40*number;
rect.right=190+40*number;
pdc->FillRect(&rect,&br3);
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(125,255,125));
pdc->TextOut(165+40*number,572,str);
}
void CDemPrimView::SetLowcost(int number, CString str)
{
CDC*pdc=GetDC();
CBrush br3;
br3.CreateSolidBrush(RGB(255,255,255));
pdc->SetBkColor(RGB(0, 0 ,0));
CRect rect;
rect.top=600;
rect.bottom=620;
rect.left=160+40*number;
rect.right=190+40*number;
pdc->FillRect(&rect,&br3);
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(255,255,255));
pdc->TextOut(165+40*number,602,str);
}
void CDemPrimView::DrawNode(int number)
{
CDC*pdc=GetDC();
CBrush br2(RGB(255,0,0));
pdc->SelectObject(&br2);
CRect rect2;
int tonumber=m_nodenumber;
double m_num=2*3.1415926*number/tonumber;
int m_x=(int)(200+150*(cos(m_num)));
int m_y=(int)(240+150*(sin(m_num)));
rect2.left=m_x-15;
rect2.right=m_x+15;
rect2.top=m_y-15;
rect2.bottom=m_y+15;
pdc->Ellipse(&rect2);
CBrush br3;
br3.CreateSolidBrush(RGB(0,0,0));
pdc->SetBkColor(RGB(255,0,0));
char c='A'+number;
CString m_str;
m_str.Format("%c",c);
pdc->TextOut(m_x-3,m_y-8,m_str);}
void CDemPrimView::drawArc(int number1, int number2)
{
CDC*pdc=GetDC();
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen*p=pdc->SelectObject(&pen);
int tonumber=m_nodenumber;
double m_num=2*3.1415926*number1/tonumber;
int m_x1=(int)(200+150*(cos(m_num)));
int m_y1=(int)(240+150*(sin(m_num)));
m_num=2*3.1415926*number2/tonumber;
int m_x2=(int)(200+150*(cos(m_num)));
int m_y2=(int)(240+150*(sin(m_num)));
pdc->MoveTo(m_x1,m_y1);
pdc->LineTo(m_x2,m_y2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -