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

📄 inputgraphprimdlg.cpp

📁 师兄做的算法可视化演示程序
💻 CPP
字号:
// InputGraphPrimDlg.cpp : implementation file
//

#include "stdafx.h"
#include "AlgorithmicDesign.h"
#include "InputGraphPrimDlg.h"
#include "InPutNodeArcDlg.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CInputGraphPrimDlg dialog


CInputGraphPrimDlg::CInputGraphPrimDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CInputGraphPrimDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CInputGraphPrimDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CInputGraphPrimDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CInputGraphPrimDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CInputGraphPrimDlg, CDialog)
	//{{AFX_MSG_MAP(CInputGraphPrimDlg)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(ID_NODE, OnNode)
	ON_BN_CLICKED(ID_ARC, OnArc)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CInputGraphPrimDlg message handlers

void CInputGraphPrimDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
    CRect rect;
   // CWnd* pWndLandmark=GetDlgItem(IDC_STATIC_PICTURE);
	//pWndLandmark->GetWindowRect(rect);
    rect.left=10;
	rect.right=385;
	rect.top=10;
	rect.bottom=292;
	CBrush br(RGB(150, 175, 230));
   //this->GetClientRect(&recttone);
    dc.FillRect(&rect,&br);
	for(int i=0;i<m_nodenumber;i++)
	{
		char c='A'+i;
		Drawnode(pointarray[i],c);
	}
	// TODO: Add your message handler code here	
	// Do not call CDialog::OnPaint() for painting messages
}


void CInputGraphPrimDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_nodeflag)
	{
	  CRect rect=CRect(0,0,0,0);
      rect.left=10+15;
	  rect.top=10+15;
	  rect.right=385-15;
	  rect.bottom=292-15;
      if(rect.PtInRect(point))
	  {
		 pointarray[m_nodenumber].x=point.x;
		 pointarray[m_nodenumber].y=point.y;
		 m_nodenumber++;
		 if(m_nodenumber>50)
		 {
			 MessageBox("最多50个顶点!","普里姆算法数据输入窗口",MB_OK);
             OnArc();
		 }
         //OnPaint();
		 char c='A'+m_nodenumber-1;
		 Drawnode(point,c);
	  }
	}
	CDialog::OnLButtonDown(nFlags, point);
}

void CInputGraphPrimDlg::Drawnode(CPoint point,char c)
{
		CDC*pdc=GetDC();
        CBrush br2(RGB(0,255,0));
        CRect rect2(point.x-15,point.y-15,point.x+15,point.y+15);
		pdc->SelectObject(&br2);
		pdc->Ellipse(&rect2);
		CBrush br3;
        br3.CreateSolidBrush(RGB(0,0,0));
        pdc->SetBkColor(RGB(0,255,0));
		//char c='A'+m_nodenumber-1;
        CString m_str;
		m_str.Format("%c",c);
        pdc->TextOut(point.x-3,point.y-8,m_str);


}

BOOL CInputGraphPrimDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_NodeButton.SubclassDlgItem (ID_NODE, this);
	m_NodeButton.SetIcon (IDI_NODE);
	m_NodeButton.SetActiveBgColor( RGB(198, 211, 238));
	m_ArcButton.SubclassDlgItem (ID_ARC, this);
	m_ArcButton.SetIcon (IDI_NODE);
	m_ArcButton.SetActiveBgColor( RGB(198, 211, 238));
	m_OkButton.SubclassDlgItem (IDOK, this);
	m_OkButton.SetIcon (IDI_OK1);
	m_OkButton.SetActiveBgColor( RGB(198, 211, 238));
	m_HelpButton.SubclassDlgItem (ID_HELP2, this);
	m_HelpButton.SetIcon (IDI_INTRODUCE);
	m_HelpButton.SetActiveBgColor( RGB(198, 211, 238));
	m_CancelButton.SubclassDlgItem (IDCANCEL, this);
	m_CancelButton.SetIcon (IDI_OK);
	m_CancelButton.SetActiveBgColor( RGB(198, 211, 238));

	CWnd* pWnd;
	pWnd = GetDlgItem(ID_ARC);
	pWnd->EnableWindow(FALSE);
	m_nodeflag=0;
	m_arcflag=0;
	m_nodenumber=0;
	for(int i=0;i<50;i++)
		for(int j=0;j<50;j++)
			gn[i][j]=0;
//	pWnd = GetDlgItem(IDCANCEL);
//	pWnd->EnableWindow(TRUE);
	OnPaint();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CInputGraphPrimDlg::OnNode() 
{
	// TODO: Add your control notification handler code here
	m_nodeflag=1;
	m_nodenumber=0;
	CWnd* pWnd;
	pWnd = GetDlgItem(ID_ARC);
	pWnd->EnableWindow(TRUE);
	pWnd = GetDlgItem(ID_NODE);
	pWnd->EnableWindow(FALSE);	
}

void CInputGraphPrimDlg::OnArc() 
{
	// TODO: Add your control notification handler code here
	m_nodeflag=0;
	m_arcflag=1;
	CWnd* pWnd;
	pWnd = GetDlgItem(ID_ARC);
	pWnd->EnableWindow(FALSE);
	CInPutNodeArcDlg m_InPutNodeArcDlg(this);
   // CRect rect;
//	m_InPutNodeArcDlg.GetWindowRect(rect);
//	rect.left+=100;
//	rect.right+=100;
//	m_InPutNodeArcDlg.MoveWindow(&rect,TRUE);
	m_InPutNodeArcDlg.DoModal();
}

void CInputGraphPrimDlg::Drawarc(int number1, int number2,double arc)
{
	CDC*pdc=GetDC();
	CPen pen;
	pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
	CPen*p=pdc->SelectObject(&pen);
    pdc->MoveTo(pointarray[number1].x,pointarray[number1].y);
    pdc->LineTo(pointarray[number2].x,pointarray[number2].y);
	int m_x=(pointarray[number1].x+pointarray[number2].x)/2;
	int m_y=(pointarray[number1].y+pointarray[number2].y)/2;
	CBrush br3;
    br3.CreateSolidBrush(RGB(0,0,0));
    pdc->SetBkColor(RGB(150, 175, 230));
    CString m_str;
	m_str.Format("%.1f",arc);
    pdc->TextOut(m_x-5,m_y-10,m_str);
	gn[number1][number2]=arc;
    gn[number2][number1]=arc;
}

void CInputGraphPrimDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

void CInputGraphPrimDlg::OnOK() 
{
	// TODO: Add extra validation here
	CMainFrame*	pMainFrame	=(CMainFrame*)::AfxGetMainWnd();
    if(m_nodenumber<=0)
	{
		MessageBox("    顶点个数应大于零!","普里姆算法数据输入窗口",MB_OK);
		return;
	}
    pMainFrame->pMintreegreedyFrame->p_DemolistView->m_nodenumber=m_nodenumber;
	pMainFrame->pMintreegreedyFrame->p_AlgorithmiclistView->m_nodenumber=m_nodenumber;
	for(int i=0;i<m_nodenumber;i++)
		for(int j=0;j<m_nodenumber;j++)
		{
			pMainFrame->pMintreegreedyFrame->p_DemolistView->gn[i][j]=gn[i][j];
			pMainFrame->pMintreegreedyFrame->p_AlgorithmiclistView->gn[i][j]=gn[i][j];
		}
    pMainFrame->pMintreegreedyFrame->p_DemolistView->SetInitTimer();
    pMainFrame->pMintreegreedyFrame->p_VariablelistView->Setvtxnum(m_nodenumber,1);
	CDialog::OnOK();
}

⌨️ 快捷键说明

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