cchdulinkview.cpp

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

CPP
519
字号

void CCCHDUlinkView::OnCreateDUlink() 
{
	// TODO: Add your control notification handler code here
	int i = 0, k, total = 0;
	Visited_node = dulist.GetHead();
	UpdateData( TRUE );
	if( dulist.GetCount( )!= 0 )
		dulist.DelDulist( );
	m_NodeValue = m_nodevalue;
	k = m_nodevalue.GetLength();
	if( k != 0 )
	while( i < k   )
	{
		total = 0;
		while( i < k && m_NodeValue[ i ] == ' ' ) 
			i++;
		if( i < k &&isdigit( m_NodeValue[ i ] ) )
			total = static_cast< int >( m_NodeValue[ i ] ) - 48;
			i++;
			while(  i < k && isdigit( m_NodeValue[ i ]  ) )
			{
				 
				total = total * 10 + ( static_cast< int >( m_NodeValue[ i ] ) - 48 );
				i++;
			}
		while( i < k && m_NodeValue[ i ] == ' ' ) 
			i++;
			dulist.InsertAtBack( total );
	}
	m_out = m_NodeValue;
	m_tt = dulist.GetCount( );
	Invalidate( );
	UpdateData( FALSE );

	
}

void CCCHDUlinkView::OnChangeEdit2() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	
}

void CCCHDUlinkView::OnButton5() 
{
	// TODO: Add your control notification handler code here
	dulist.RemoveAtBack();
	Invalidate( );


	
}

void CCCHDUlinkView::DrawLink(CPaintDC &dc, int time)
{ 
	int x = 1;
	node = dulist.GetHead( )->Next;
	if( Headnode == "有头节点")
	{
		// TODO: Add your message handler code here
		dc.TextOut( Position.m_x - 49 , Position.m_y - 25, "CCHDUlink" );
		dc.MoveTo( Position.m_x + 40, Position.m_y );
		dc.LineTo( Position.m_x + 20, Position.m_y - 10 );
		dc.MoveTo( Position.m_x + 20, Position.m_y  - 10 );
		dc.LineTo( Position.m_x - 49 , Position.m_y - 10 );
		
		if( Visited_node == dulist.GetLast( ) ) Visited_node = Visited_node -> Next;
		dc.Rectangle( Position.m_x + 40, Position.m_y + time * 40,
			Position.m_x + 60 + 40, Position.m_y + 20 );
		if( Visited_node == dulist.GetHead( ) )
		{
			SelectObject( dc, ::CreateSolidBrush( RGB( 128, 128, 192 ) ) );
			dc.Rectangle( Position.m_x + 40, Position.m_y + time * 40,
			Position.m_x + 60 + 40, Position.m_y + 20 );
		}
		dc.MoveTo( Position.m_x + 10 + 40, Position.m_y );
		dc.LineTo( Position.m_x + 10 + 40, Position.m_y + 20 );
		dc.MoveTo( Position.m_x + 50 + 40, Position.m_y );
		dc.LineTo( Position.m_x + 50 + 40, Position.m_y + 20 );
		for( int i = 1; i < 5; i++ )
		{
			dc.MoveTo( Position.m_x + 50 + 10 * i, Position.m_y );
			dc.LineTo( Position.m_x + 40 + 10 * i, Position.m_y + 20 );
		}
		x = x + 2;
		dc.MoveTo( Position.m_x, Position.m_y + 5 );
		dc.LineTo( Position.m_x + 47, Position.m_y + 5 );
		dc.MoveTo( Position.m_x + 10, Position.m_y + 15 );
		dc.LineTo( Position.m_x + 47, Position.m_y + 15 );

		dc.MoveTo( Position.m_x + 47, Position.m_y + 5 );
		dc.LineTo( Position.m_x + 42, Position.m_y + 3 );
		dc.MoveTo( Position.m_x + 47, Position.m_y + 5 );
		dc.LineTo( Position.m_x + 42, Position.m_y + 7 );
	}
	else if( Headnode == "无头节点" ){
		if( dulist.GetCount() != 0 )
		{
			dc.TextOut( Position.m_x - 39 , Position.m_y - 25, "CCDUlink" );
			dc.MoveTo( Position.m_x + 40, Position.m_y );
			dc.LineTo( Position.m_x + 20, Position.m_y - 10 );
			dc.MoveTo( Position.m_x + 20, Position.m_y - 10 );
			dc.LineTo( Position.m_x - 39 , Position.m_y - 10 );
			if( Visited_node == dulist.GetLast( ) ) Visited_node = Visited_node ->Next ->Next;

			dc.Rectangle( Position.m_x + 40, Position.m_y,
			Position.m_x + 60 + 40, Position.m_y + 20 );

		if( Visited_node == dulist.GetHead( )->Next )
		{
			SelectObject( dc, ::CreateSolidBrush( RGB( 128, 128, 192 ) ) );
			dc.Rectangle( Position.m_x + 40, Position.m_y + time * 40,
			Position.m_x + 60 + 40, Position.m_y + 20 );
		}
		dc.MoveTo( Position.m_x + 10 + 40, Position.m_y );
		dc.LineTo( Position.m_x + 10 + 40, Position.m_y + 20 );
		dc.MoveTo( Position.m_x + 50 + 40, Position.m_y );
		dc.LineTo( Position.m_x + 50 + 40, Position.m_y + 20 );
		s.Format( "%d", node->Data );
		dc.TextOut( Position.m_x + 40 + 15, Position.m_y + 2, s );
		node = node->Next;
		x = x + 2;
		}
	}
	SelectObject( dc, ::CreateSolidBrush( RGB( 255,255,255 ) ) );
	while( node != dulist.GetLast() )
	{
		if( x > 2 * NodeNumber )
		{
			x = 1;
			time = time + 1;
		}
		DrawNode( x, dc, time );
		x = x + 2;
		node = node->Next;
	}
//////////////////////////////////////////////////////////
	if( Headnode == "有头节点" || dulist.GetCount( )!= 0  )
	{
		dc.MoveTo( Position.m_x, Position.m_y + 5 );
		dc.LineTo( Position.m_x + 47, Position.m_y + 5 );
		dc.MoveTo( Position.m_x + 10, Position.m_y + 15 );
		dc.LineTo( Position.m_x + 47, Position.m_y + 15 );
	
		dc.MoveTo( Position.m_x, Position.m_y + 5 );
		dc.LineTo( Position.m_x, Position.m_y + time * 40 + 35 );
		dc.MoveTo( Position.m_x + 10, Position.m_y + 15 );
		dc.LineTo( Position.m_x + 10, Position.m_y + time * 40 + 25 );

		dc.MoveTo( Position.m_x, Position.m_y + time * 40 + 35 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 40, Position.m_y + time * 40 + 35 );
		dc.MoveTo( Position.m_x + 10, Position.m_y + time * 40 + 25 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 30, Position.m_y + time * 40 + 25 ); 

		dc.MoveTo( Position.m_x + ( x / 2 ) * 80 + 30, Position.m_y + time * 40 + 15 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 30, Position.m_y + time * 40 + 25 );
		dc.MoveTo( Position.m_x + ( x / 2 ) * 80 + 40, Position.m_y + time * 40 + 35 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 40, Position.m_y + time * 40 + 5 );

		dc.MoveTo( Position.m_x + ( x / 2 ) * 80 + 30, Position.m_y + time * 40 + 15 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 12, Position.m_y + time * 40 + 15 );
		dc.MoveTo( Position.m_x + ( x / 2 ) * 80 + 40, Position.m_y + time * 40 + 5 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 12, Position.m_y + time * 40 + 5 );
		
		dc.MoveTo( Position.m_x + ( x / 2 ) * 80 + 12, Position.m_y + time * 40 + 15 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 17, Position.m_y + time * 40 + 13 );
		dc.MoveTo( Position.m_x + ( x / 2 ) * 80 + 12, Position.m_y + time * 40 + 15 );
		dc.LineTo( Position.m_x + ( x / 2 ) * 80 + 17, Position.m_y + time * 40 + 17 );
	
	}
//////////////////////////////////////////////////////////
	if( dulist.GetCount( )!= 0 )
	{	
		dc.MoveTo( Position.m_x, Position.m_y + 5 );
		dc.LineTo( Position.m_x + 47, Position.m_y + 5 );
		dc.MoveTo( Position.m_x + 10, Position.m_y + 15 );
		dc.LineTo( Position.m_x + 47, Position.m_y + 15 );

		dc.MoveTo( Position.m_x + 47, Position.m_y + 5 );
		dc.LineTo( Position.m_x + 42, Position.m_y + 3 );
		dc.MoveTo( Position.m_x + 47, Position.m_y + 5 );
		dc.LineTo( Position.m_x + 42, Position.m_y + 7 );
	}

}

void CCCHDUlinkView::OnNextNode() 
{
	// TODO: Add your control notification handler code here
	Visited_node = Visited_node -> Next;
	Invalidate( );
	
}

void CCCHDUlinkView::OnPriorNode() 
{
	// TODO: Add your control notification handler code here
	if( Visited_node == dulist.GetHead( )->Next && Headnode == "无头节点" ) 
		Visited_node = Visited_node ->Prior ->Prior;
	if( Visited_node == dulist.GetHead( ) && Headnode == "有头节点" )
		Visited_node = Visited_node -> Prior;
	Visited_node = Visited_node ->Prior;
	Invalidate( );
}

void CCCHDUlinkView::OnButton4() 
{
	// TODO: Add your control notification handler code here
	dulist.RemoveAtFront();
	Invalidate( );
	
}

void CCCHDUlinkView::OnButton6() 
{
	// TODO: Add your control notification handler code here
	
}

void CCCHDUlinkView::OnClear() 
{
	// TODO: Add your control notification handler code here
	dulist.DelDulist( );
	Invalidate( );
}

void CCCHDUlinkView::OnDeleteAtLocate() 
{
	// TODO: Add your control notification handler code here
	int Locate;
	UpdateData( TRUE );
	Locate = m_locate;
	if( dulist.Delete_element( Locate ) == Unsuccess )
		MessageBox( "删除下标越围,删除错误!!!", NULL, MB_OK );
	Invalidate( );
	UpdateData( FALSE );
}

void CCCHDUlinkView::OnDeleteWithelement() 
{
	// TODO: Add your control notification handler code here
	int LocateData;
	UpdateData( TRUE );
	LocateData = m_locateData;
	dulist.Delete_elememt( LocateData );
	Invalidate( );
	UpdateData( FALSE );
}


	

⌨️ 快捷键说明

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