cchdulinkview.cpp

来自「本题所涉及的有关操作是从控件中选择所要创建的链表的类型(用VC的Radio Bu」· C++ 代码 · 共 519 行 · 第 1/2 页

CPP
519
字号
// CCHDUlinkView.cpp : implementation of the CCCHDUlinkView class
//

#include "stdafx.h"
#include "CCHDUlink.h"

#include "CCHDUlinkDoc.h"
#include "CCHDUlinkView.h"
////////////////////
#include"Dulist.h"
#include <ctype.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCCHDUlinkView
Dulist< int > dulist;
Dunode< int > *node, *Visited_node = NULL;
CString s;
const int NodeNumber = 6;

IMPLEMENT_DYNCREATE(CCCHDUlinkView, CFormView)

BEGIN_MESSAGE_MAP(CCCHDUlinkView, CFormView)
	//{{AFX_MSG_MAP(CCCHDUlinkView)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_RADIO1, OnHeadNode)
	ON_BN_CLICKED(IDC_RADIO2, OnNotHead)
	ON_BN_CLICKED(IDC_BUTTON1, OnCreateDUlink)
	ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON2, OnNextNode)
	ON_BN_CLICKED(IDC_BUTTON3, OnPriorNode)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON6, OnClear)
	ON_BN_CLICKED(IDC_BUTTON7, OnDeleteAtLocate)
	ON_BN_CLICKED(IDC_BUTTON8, OnDeleteWithelement)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCCHDUlinkView construction/destruction

CCCHDUlinkView::CCCHDUlinkView()
	: CFormView(CCCHDUlinkView::IDD)
{
	//{{AFX_DATA_INIT(CCCHDUlinkView)
	m_out = _T("");
	m_nodevalue = _T("");
	m_tt = 0;
	m_locate = 0;
	m_locateData = 0;
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	Position.m_x = 150;
	Position.m_y = 150;
}

CCCHDUlinkView::~CCCHDUlinkView()
{
}

void CCCHDUlinkView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCCHDUlinkView)
	DDX_Text(pDX, IDC_EDIT1, m_out);
	DDX_Text(pDX, IDC_EDIT2, m_nodevalue);
	DDX_Text(pDX, IDC_EDIT3, m_tt);
	DDX_Text(pDX, IDC_EDIT4, m_locate);
	DDX_Text(pDX, IDC_EDIT5, m_locateData);
	//}}AFX_DATA_MAP
}

BOOL CCCHDUlinkView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CCCHDUlinkView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

}

/////////////////////////////////////////////////////////////////////////////
// CCCHDUlinkView printing

BOOL CCCHDUlinkView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CCCHDUlinkView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CCCHDUlinkView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CCCHDUlinkView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CCCHDUlinkView diagnostics

#ifdef _DEBUG
void CCCHDUlinkView::AssertValid() const
{
	CFormView::AssertValid();
}

void CCCHDUlinkView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CCCHDUlinkDoc* CCCHDUlinkView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCCHDUlinkDoc)));
	return (CCCHDUlinkDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCCHDUlinkView message handlers

void CCCHDUlinkView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CPen oldPen, clearPen;
	int time = 0;
	
	HBRUSH  oldBrush , clearBrush;
	clearPen.CreatePen( PS_SOLID, 0, GetBkColor( dc ) );
	clearBrush = ::CreateSolidBrush( GetBkColor( dc ) );
	dc.SelectObject( clearPen );
	SelectObject( dc, clearBrush );
	dc.Rectangle( Position.m_x - 50, Position.m_y - 100,
		Position.m_x + 1000, Position.m_y + 800 );  
	oldPen.CreatePen( PS_SOLID, 0, RGB( 0,0,0 ) );
	oldBrush = ::CreateSolidBrush( RGB( 255,255,255 ) );
	dc.SelectObject( oldPen );
	SelectObject( dc, oldBrush );
	DrawLink(dc, time);
	// Do not call CFormView::OnPaint() for painting messages
}

void CCCHDUlinkView::DrawNode(int node_x, CPaintDC &dc, int time )
{
	int i;
	if( node == Visited_node )
	{
		SelectObject( dc, ::CreateSolidBrush( RGB( 128, 128, 192 ) ) );
		dc.Rectangle( Position.m_x + 40 * node_x, Position.m_y + time * 40,
		Position.m_x + 60 + 40 * node_x, Position.m_y  + time * 40 + 20 );
	}
	else SelectObject( dc, ::CreateSolidBrush( RGB( 255, 255, 255 ) ) );
	
	dc.Rectangle( Position.m_x + 40 * node_x, Position.m_y + time * 40,
		Position.m_x + 60 + 40 * node_x , Position.m_y + time * 40 + 20 );
	//画节点;
    dc.MoveTo( Position.m_x + 10 + 40 * node_x, Position.m_y + time * 40 );
	dc.LineTo( Position.m_x + 10 + 40 * node_x, Position.m_y + time * 40 + 20 );
	dc.MoveTo( Position.m_x + 50 + 40 * node_x, Position.m_y + time * 40 );
	dc.LineTo( Position.m_x + 50 + 40 * node_x, Position.m_y + time * 40 + 20 );
    //画指针;
	if( node_x > 1 )
	{
		dc.MoveTo( Position.m_x + 13 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 5 );
		dc.LineTo( Position.m_x + 48 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 5 );
		dc.MoveTo( Position.m_x + 13 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 15 );
		dc.LineTo( Position.m_x + 48 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 15 );

		
		dc.MoveTo( Position.m_x + 48 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 5 );
		dc.LineTo( Position.m_x + 43 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 3 );
		dc.MoveTo( Position.m_x + 48 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 5 );
		dc.LineTo( Position.m_x + 43 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 7 );

		dc.MoveTo( Position.m_x + 13 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 15 );
		dc.LineTo( Position.m_x + 18 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 13 );
		dc.MoveTo( Position.m_x + 13 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 15 );
		dc.LineTo( Position.m_x + 18 + 40 * ( node_x - 1 ), Position.m_y + time * 40 + 17 );
	}
	if( time != 0 )
		for( i = 0; i < time; i++ )
		{
			dc.MoveTo( Position.m_x + 20, Position.m_y + i * 40 + 55 );
			dc.LineTo( Position.m_x + 47, Position.m_y + i * 40 + 55 );

			dc.MoveTo( Position.m_x + 30, Position.m_y + i * 40 + 45 );
			dc.LineTo( Position.m_x + 47, Position.m_y + i * 40 + 45 );
			
	        dc.MoveTo( Position.m_x + 20, Position.m_y + i * 40 + 25 );
			dc.LineTo( Position.m_x + 80 * NodeNumber + 30, Position.m_y + i * 40 + 25 );

			dc.MoveTo( Position.m_x + 30, Position.m_y + i * 40 + 35 );
			dc.LineTo( Position.m_x + 80 * NodeNumber + 40, Position.m_y + i * 40 + 35 );

			dc.MoveTo( Position.m_x + 13 + 80 * NodeNumber, Position.m_y + i * 40 + 5 );
			dc.LineTo( Position.m_x + 40 + 80 * NodeNumber, Position.m_y + i * 40 + 5 );
			dc.MoveTo( Position.m_x + 13 + 80 * NodeNumber, Position.m_y + i * 40 + 15 );
			dc.LineTo( Position.m_x + 30 + 80 * NodeNumber, Position.m_y + i * 40 + 15 );
			
			dc.MoveTo( Position.m_x + 40 + 80 * NodeNumber, Position.m_y + i * 40 + 5 );
			dc.LineTo( Position.m_x + 40 + 80 * NodeNumber, Position.m_y + i * 40 + 35 );
			dc.MoveTo( Position.m_x + 30 + 80 * NodeNumber, Position.m_y + i * 40 + 15 );
			dc.LineTo( Position.m_x + 30 + 80 * NodeNumber, Position.m_y + i * 40 + 25 );

			dc.MoveTo( Position.m_x + 20, Position.m_y + i * 40 + 25 );
			dc.LineTo( Position.m_x + 20, Position.m_y + i * 40 + 55 );
			dc.MoveTo( Position.m_x + 30, Position.m_y + i * 40 + 35 );
			dc.LineTo( Position.m_x + 30, Position.m_y + i * 40 + 45 );
			
			dc.MoveTo( Position.m_x + 13 + 80 * NodeNumber, Position.m_y + i * 40 + 15 );
			dc.LineTo( Position.m_x + 18 + 80 * NodeNumber, Position.m_y + i * 40 + 13 );
			dc.MoveTo( Position.m_x + 13 + 80 * NodeNumber, Position.m_y + i * 40 + 15 );
			dc.LineTo( Position.m_x + 18 + 80 * NodeNumber, Position.m_y + i * 40 + 17 );

			dc.MoveTo( Position.m_x + 47, Position.m_y + i * 40 + 45 );
			dc.LineTo( Position.m_x + 42, Position.m_y + i * 40 + 43 );
			dc.MoveTo( Position.m_x + 47, Position.m_y + i * 40 + 45 );
			dc.LineTo( Position.m_x + 42, Position.m_y + i * 40 + 47 );
		}

	s.Format( "%d", node->Data );
	dc.TextOut( Position.m_x + 40 * node_x + 15, Position.m_y + time * 40 + 2, s );
}

void CCCHDUlinkView::OnHeadNode() 
{
	// TODO: Add your control notification handler code here 
	Headnode = "有头节点";
}

void CCCHDUlinkView::OnNotHead() 
{
	// TODO: Add your control notification handler code here
	Headnode = "无头节点";	
}

⌨️ 快捷键说明

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