www.gusucode.com > VC++开发的电路板画图设计软件源代码源码程序 > VC++开发的电路板画图设计软件源代码源码程序\code\MyWatch.cpp

    //Download by http://www.NewXing.com
// MyWatch.cpp : implementation file
//

#include "stdafx.h"
#include "pointtest.h"
#include "MyWatch.h"

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

#define BACKCOLOR RGB( 128,128,0 )
#define PEN1COLOR RGB( 191,191,191 )
#define PEN2COLOR RGB( 0,0,0 )

/////////////////////////////////////////////////////////////////////////////
// MyWatch dialog


MyWatch::MyWatch(CWnd* pParent /*=NULL*/)
	: CDialog(MyWatch::IDD, pParent)
{
	m_pView = NULL;
	//{{AFX_DATA_INIT(MyWatch)
	//}}AFX_DATA_INIT
}

MyWatch::MyWatch( CView *view )
{
	m_NUMBER = 1 ;
	m_ButtonID = tool.list.CreateButton( CPoint( 0,0 ),20,20,IDB_BUTTON1,IDB_BUTTON2,IDB_BUTTON3 );
	m_ID = 0;
	m_Title = "电流表";
	m_Name = "A";           //电表名
	m_Value = -2;           //表值
	m_PrevValue = 0;
	m_Units = "毫安";//单位
	m_BigValue = 24; //电表的最大值
	m_pView = view ;
	m_LFlag = FALSE;
	m_BigFlag = FALSE;
	m_BaiDongFlag = FALSE;
	m_Number = 0;
	m_tempValue = 0;
}

MyWatch::MyWatch( CView *view,CString name1,UINT id,CString name,double value,CString units,double big )
{
	m_NUMBER = 1 ;
	m_ButtonID = tool.list.CreateButton( CPoint( 0,0 ),20,20,IDB_BUTTON1,IDB_BUTTON2,IDB_BUTTON3 );
	///////////////////////
	m_pView = view ;
	m_LFlag = FALSE;
	m_BigFlag = FALSE;
	m_BaiDongFlag = FALSE;
	m_Number = 0;
	m_tempValue = 0;
	m_PrevValue = 0;
	///////////////////////

    m_Title = name1;
	m_ID = id;
	m_Name = name;           //电表名
	m_Value = value;           //表值
	m_Units = units;//单位
	m_BigValue = big; //电表的最大值
	SetWindowText( m_Title );

}

void MyWatch::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(MyWatch)
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(MyWatch, CDialog)
	//{{AFX_MSG_MAP(MyWatch)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// MyWatch message handlers

BOOL MyWatch::Create( )
{
	return CDialog::Create( MyWatch::IDD );
}

void MyWatch::OnOK()
{
	// TODO: Add extra validation here
	if ( m_pView != NULL )
	{
	m_pView->PostMessage(WM_GOODBYE,IDCANCEL);
	}
	else
	{
		CDialog::OnOK();
	}
}

void MyWatch::OnCancel() 
{
	if ( m_pView != NULL )
	{
        DestroyWindow();
		delete this;
		m_pView->PostMessage(WM_GOODBYE);
	}
	else
	{
		CDialog::OnCancel();
	}
}

void MyWatch::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	DrawScreen();
}

void MyWatch::DrawScreen()
{

	CDC *pDC = GetDC( );
    CRect rect,rect1,rect2;
	GetClientRect( rect );
	CDC *dc = new CDC;
	CBitmap *bitmap = new CBitmap;
	CBitmap *pOld;
	dc->CreateCompatibleDC( pDC );
	bitmap->CreateCompatibleBitmap( pDC,rect.Width(),rect.Height() );
	pOld = dc->SelectObject( bitmap );
	dc->PatBlt( 0,0,rect.Width(),rect.Height(),WHITENESS );
	dc->FillSolidRect( 0,0,rect.Width(),rect.Height(),BACKCOLOR );

	//////////////////////////////////////////////////////////////////////////
	//画表盘 
	rect1 = CRect( rect.left+10,rect.top+10,rect.right-10,rect.bottom/5*3 );
    ///////////////////////////////////////////////////////////////////////
	//画边框
	rect2 = CRect( rect1.left-3,rect1.top-3,rect1.right+3,rect1.bottom+3 );
	CPen pen1,pen2,*oldpen;
	pen1.CreatePen( PS_SOLID,1,PEN1COLOR );
	pen2.CreatePen( PS_SOLID,1,PEN2COLOR );
	oldpen = dc->SelectObject( &pen1 );
	for ( int i = 0;i<3;i++ )
	{
		dc->MoveTo( rect2.left+i,rect2.top+i );
		dc->LineTo( rect2.left+i,rect2.bottom-i );
		dc->MoveTo( rect2.left+i,rect2.top+i );
		dc->LineTo( rect2.right-i,rect2.top+i );
	}
	dc->SelectObject( oldpen );
	DeleteObject( pen1 );
	oldpen = dc->SelectObject( &pen2 );
	for ( i = 0;i<3;i++ )
	{
		dc->MoveTo( rect2.left+i,rect2.bottom-i );
		dc->LineTo( rect2.right-i,rect2.bottom-i );
		dc->MoveTo( rect2.right-i,rect2.top+i );
		dc->LineTo( rect2.right-i,rect2.bottom-i );
	}
	dc->SelectObject( oldpen );
	DeleteObject( pen2 );
	////////////////////////////////////////////////////////////////////
	face.SetParam( rect1.TopLeft(),rect1.Width(),rect1.Height(),m_Name,m_BigValue,m_Units,m_PrevValue );
	face.Draw( dc,m_NUMBER );
	///////////////////////////////////////////////////////////////////
	if ( face.m_BigFlag )
	{
		m_BigFlag = face.m_BigFlag;
	}
	else
	{
		if ( face.m_SmallFlag )
		{
			m_BigFlag = face.m_SmallFlag;
		}
		else
		{
			m_BigFlag = FALSE;
		}
	}
    //////////////////////////////////////////////////////////////////////////


	////////////////////////////////////////////////////
    //画显示开关
	CDC *dc1 = new CDC;
	CBitmap *bitmap1 = new CBitmap;
	CBitmap *old1;
	dc1->CreateCompatibleDC( dc );
	if ( m_BigFlag == FALSE )
	{
		bitmap1->LoadBitmap( IDB_BIGFLAG1 );
	}
	else
	{
		bitmap1->LoadBitmap( IDB_BIGFLAG2 );
	}
	old1 = dc1->SelectObject( bitmap1 );
	dc->BitBlt( rect1.right-60,rect1.bottom+20,20,20,dc1,0,0,SRCCOPY );
	dc1->SelectObject( old1 );
	delete dc1;
	delete bitmap1;
    /////////////////////////////////////////

    ////////////////////////////////////////
	//画按钮
	tool.list.ExchangeButtonPosition( CPoint( rect1.right-90,rect1.bottom+20 ),m_ButtonID );
	tool.Draw( dc );
    ////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////
	//画正负插头
    COLORREF oldcolor=dc->SetTextColor( RGB( 255,0,0 ) );  //显示字体颜色
	int oldmode=dc->SetBkMode( TRANSPARENT );    //设置背景为透明色
	CPen pen3,*pPen3;
	pen3.CreatePen( PS_SOLID,1,RGB( 255,0,0 ) );
	pPen3 = dc->SelectObject( &pen3 );
	dc->SelectStockObject( NULL_BRUSH );

	dc->TextOut( rect.right-32,rect.bottom-60,"+" );
	dc->Ellipse( rect.right-40,rect.bottom-40,rect.right-20,rect.bottom-20 );
	dc->Ellipse( rect.right-35,rect.bottom-35,rect.right-25,rect.bottom-25 );
	dc->SelectObject( pPen3 );
	DeleteObject( pen3 );
	CPen pen4,*pPen4;
	pen4.CreatePen( PS_SOLID,1,RGB( 0,0,0 ) );
	pPen4 = dc->SelectObject( &pen4 );
	dc->SetTextColor( oldcolor );
	COLORREF oldcolor1=dc->SetTextColor( RGB( 0,0,0 ) );  //显示字体颜色
	dc->TextOut( rect.left+27,rect.bottom-60,"-" );
    dc->Ellipse( rect.left+40,rect.bottom-40,rect.left+20,rect.bottom-20 );
	dc->Ellipse( rect.left+35,rect.bottom-35,rect.left+25,rect.bottom-25 );
	dc->SelectObject( pPen4 );
	DeleteObject( pen4 );   
	dc->SetTextColor( oldcolor1 );
    dc->SetBkMode( oldmode );

    pDC->BitBlt( 0,0,rect.Width(),rect.Height(),dc,0,0,SRCCOPY );
	dc->SelectObject( pOld );
	delete dc;
	delete bitmap;	
	ReleaseDC( pDC );

	///////////////////////////////////////////////////////////////////////////
}

void MyWatch::SetParam( CString name1,UINT id,CString name,double value,CString units,double big )
{
	UpdateData( FALSE );
	m_Title = name1;
	SetWindowText( m_Title );
	m_ID = id;
    m_Name = name;
	m_Value = value;
	
	m_Units = units;
	m_BigValue = big;
	DrawScreen( );
	SetTimer( 1,100,NULL );
	if ( m_BaiDongFlag )
	{
	   SetTimer( 1,100,NULL );
	}
}

void MyWatch::OnLButtonDown(UINT nFlags, CPoint point) 
{
	m_LFlag = TRUE;
	tool.OnLButtonDown( nFlags,point );
    DrawScreen( );
	CDialog::OnLButtonDown(nFlags, point);
}

void MyWatch::OnLButtonUp(UINT nFlags, CPoint point) 
{
	m_LFlag = FALSE;
	tool.OnLButtonUp( nFlags,point );
	if ( tool.list.m_WhatToDo == m_ButtonID )
	{
		if ( m_NUMBER == 1 )
		{
			m_NUMBER = 2;
		}
		else
		{
			m_NUMBER = 1 ;
		}
		tool.list.m_WhatToDo = 0;
	}
	DrawScreen( );
	CDialog::OnLButtonUp(nFlags, point);
}

void MyWatch::OnMouseMove(UINT nFlags, CPoint point) 
{
	tool.OnMouseMove( nFlags,point );
	DrawScreen( );
	CDialog::OnMouseMove(nFlags, point);
}

void MyWatch::OnTimer(UINT nIDEvent) 
{
    if ( m_BaiDongFlag == FALSE )          //摆动标志
	{
		if ( m_Value>m_PrevValue )         //新值大于旧值
		{
			if ( m_Number == 0 )
			{
			    m_tempValue = m_Value-m_PrevValue;
				m_Number++;
			}
			m_PrevValue += ( 0.8*face.m_SingleExpress );
			if ( m_Value <= m_PrevValue )
			{
				m_PrevValue = m_Value;
				KillTimer( 1 );
				m_BaiDongFlag = TRUE;
				m_Number = 0;
				SetTimer( 1,100,NULL );
			}
		}
		else
		{
			if ( m_Number == 0 )
			{
			    m_tempValue = m_PrevValue-m_Value;
				m_Number++;
			}
			m_PrevValue-= ( 0.8*face.m_SingleExpress );
			if ( m_Value>=m_PrevValue )
			{
				m_PrevValue = m_Value;
				KillTimer( 1 );
				m_BaiDongFlag = TRUE;
				m_Number = 0;
				SetTimer( 1,100,NULL );
			}
		}
	}
	else
	{
		if ( m_BaiDongFlag )
		{
			if ( m_Number == 0 )
			{
				m_PrevValue = m_Value+m_tempValue/50;
				m_tempValue -=1*face.m_SingleExpress ;
				m_Number++;
				if ( m_tempValue<=0 )
				{
					KillTimer( 1 );
					//m_PrevValue = m_Value;
					m_BaiDongFlag = FALSE;
					m_Number = 0;
				}
				
			}
			else
			{
				m_PrevValue = m_Value-m_tempValue/50;
				m_tempValue -= 1*face.m_SingleExpress;
				m_Number = 0;
				if ( m_tempValue<=0 )
				{
					KillTimer( 1 );
					//m_PrevValue = m_Value;
					m_BaiDongFlag = FALSE;
					m_Number = 0;
				}
			}
		}
	}
	DrawScreen( );
	CDialog::OnTimer(nIDEvent);
}