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

📄 demprimview.cpp

📁 师兄做的算法可视化演示程序
💻 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 + -