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 + -
显示快捷键?