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