www.gusucode.com > VC++开发的电路板画图设计软件源代码源码程序 > VC++开发的电路板画图设计软件源代码源码程序\code\ButtonList.cpp
//Download by http://www.NewXing.com // ButtonList.cpp: implementation of the ButtonList class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "pointtest.h" #include "ButtonList.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// ButtonList::ButtonList() { m_ID = 1; m_LFlag = FALSE; m_BeSelected = FALSE; m_WhatToDo = 0; } ButtonList::~ButtonList() { DeleteAllButton( ); } void ButtonList::AddButton( Button *ptr ) { if ( MyList.IsEmpty( ) ) { MyList.AddHead( ptr ); } else { MyList.AddTail( ptr ); } } void ButtonList::DeleteAllButton( ) { POSITION pos,tempPos; Button *temp; if ( MyList.IsEmpty() ) { } else { pos = MyList.GetHeadPosition( ); while ( pos ) { tempPos = pos; temp = MyList.GetNext( pos ); MyList.RemoveAt( tempPos ); delete temp; } } } void ButtonList::DeleteAllFlag( ) { POSITION pos; Button *temp; if ( MyList.IsEmpty() ) { } else { pos = MyList.GetHeadPosition( ); while ( pos ) { temp = MyList.GetNext( pos ); temp->m_BeSelected = FALSE; temp->m_MoveBeSelected = FALSE; } } } void ButtonList::Draw( CDC *pDC ) { POSITION pos ; Button *temp; if ( MyList.IsEmpty( ) ) { } else { pos = MyList.GetHeadPosition( ) ; while ( pos ) { temp = MyList.GetNext( pos ); temp->Draw( pDC ); } } } void ButtonList::ExchangeButtonPosition( CPoint point ,UINT id ) { POSITION pos; Button *temp; if ( MyList.IsEmpty() ) { } else { pos = MyList.GetHeadPosition( ); while ( pos ) { temp = MyList.GetNext( pos ); if ( temp->m_ID == id ) { temp->ExchangeButtonPosition( point ); } } } } UINT ButtonList::CreateButton( CPoint tempPoint,int width,int hight,UINT id1,UINT id2,UINT id3 ) { Button *temp = new Button; temp->m_ID = m_ID; m_ID++; temp->m_Point = tempPoint; temp->m_Width = width; temp->m_Hight = hight; temp->m_BitmapID1 = id1; temp->m_BitmapID2 = id2; temp->m_BitmapID3 = id3; DeleteAllFlag( ); AddButton( temp ); return temp->m_ID; } void ButtonList::OnLButtonDown( UINT nFlags,CPoint point ) { m_LFlag = TRUE; POSITION pos; Button *temp; BOOL flag = FALSE; if ( MyList.IsEmpty( ) ) { } else { pos = MyList.GetHeadPosition( ); while ( pos ) { temp = MyList.GetNext( pos ); flag = temp->PtInButton( point ); if ( flag ) { m_BeSelected = TRUE; DeleteAllFlag( ); temp->m_BeSelected = TRUE; m_WhatToDo = temp->m_ID; return; } } } } void ButtonList::OnLButtonUp( UINT nFlag,CPoint point ) { m_LFlag = FALSE; BOOL flag = TRUE; if ( m_BeSelected ) { POSITION pos ; Button *temp; if ( MyList.IsEmpty( ) ) { m_BeSelected = FALSE; m_WhatToDo = 0; } else { pos = MyList.GetHeadPosition( ); while ( pos ) { temp = MyList.GetNext( pos ); if ( temp->m_ID == m_WhatToDo ) { flag = temp->PtInButton( point ); if ( flag ) { m_BeSelected = FALSE; DeleteAllFlag( ); return; } else { m_BeSelected = FALSE; m_WhatToDo = 0; DeleteAllFlag( ); return ; } } } m_BeSelected = FALSE; m_WhatToDo = 0; DeleteAllFlag( ); } } } void ButtonList::OnMouseMove( UINT nFlags,CPoint point ) { POSITION pos; Button *temp; BOOL flag = FALSE; if ( m_LFlag ) { if ( MyList.IsEmpty( ) ) { m_BeSelected = FALSE; m_WhatToDo = 0; } else { pos = MyList.GetHeadPosition( ); while ( pos ) { temp = MyList.GetNext( pos ); if ( temp->m_ID == m_WhatToDo ) { flag = temp->PtInButton( point ); if ( flag ) { temp->m_BeSelected = TRUE; return; } else { DeleteAllFlag( ); return ; } } } } } else { if ( MyList.IsEmpty( ) ) { } else { pos = MyList.GetHeadPosition( ); while ( pos ) { temp = MyList.GetNext( pos ); flag = temp->PtInButton( point ); if ( flag ) { DeleteAllFlag( ); temp->m_MoveBeSelected = TRUE; return; } else { DeleteAllFlag( ); } } } } } void ButtonList::Serialize( CArchive &ar ) { POSITION pos; Button *temp; int i = 0; if ( ar.IsStoring( ) ) { ar<<m_BeSelected<<m_LFlag; ar<<m_ID; ar<<m_WhatToDo; i = MyList.GetCount( ); ar<<i; if ( MyList.IsEmpty( ) ) { } else { pos = MyList.GetHeadPosition(); while ( pos ) { temp = MyList.GetNext( pos ); temp->Serialize( ar ); } } } else { ar>>m_BeSelected>>m_LFlag; ar>>m_ID; ar>>m_WhatToDo; ar>>i; DeleteAllButton( ); for ( int j = 0;j<i;j++ ) { temp = new Button; if ( MyList.IsEmpty( ) ) { MyList.AddHead( temp ); } else { MyList.AddTail( temp ); } temp->Serialize( ar ); } } }