📄 inputgraphprimdlg.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 + -