// DigitalLCDClass.cpp: implementation of the DigitalLCDClass class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DigitalLCDClass.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DigitalLCDClass::DigitalLCDClass()
{
m_nXPos=m_nYPos=0;
m_nItem=10;
col=RGB(255,0,0);
}
DigitalLCDClass::~DigitalLCDClass()
{
if(msg)
free(msg);
}
void DigitalLCDClass::DrawDigit(HDC hdc, int digit,int iPos=0,COLORREF col=0)
{
RECT rt;
int offset=35;
HBRUSH hBrush;
hBrush=::CreateSolidBrush (col);
if(digit==2 || digit==3||digit==5||digit==0||digit==6||digit==7||digit==8||digit==9)
{
rt.left =m_nXPos+10+iPos*offset;rt.right =m_nXPos+32+iPos*offset;
rt.top =m_nYPos+10;rt.bottom =m_nYPos+12;
::FillRect (hdc,&rt,hBrush);
rt.left =m_nXPos+11+iPos*offset;rt.right =m_nXPos+31+iPos*offset;
rt.top =m_nYPos+11;rt.bottom =m_nYPos+13;
::FillRect (hdc,&rt,hBrush);//Top
}
if(digit==2 || digit==3||digit==4||digit==5||digit==6||digit==8||digit==9)
{
rt.left =m_nXPos+10+iPos*offset;rt.right =m_nXPos+32+iPos*offset;
rt.top =m_nYPos+32;rt.bottom =m_nYPos+33;
::FillRect (hdc,&rt,hBrush);
rt.left =m_nXPos+11+iPos*offset;rt.right =m_nXPos+31+iPos*offset;
rt.top =m_nYPos+31;rt.bottom =m_nYPos+34;
::FillRect (hdc,&rt,hBrush);//middle
}
if(digit==2 || digit==3||digit==5||digit==0||digit==6||digit==8||digit==9)
{
rt.left =m_nXPos+10+iPos*offset;rt.right =m_nXPos+32+iPos*offset;
rt.top =m_nYPos+54;rt.bottom =m_nYPos+56;
::FillRect (hdc,&rt,hBrush);
rt.left =m_nXPos+11+iPos*offset;rt.right =m_nXPos+31+iPos*offset;
rt.top =m_nYPos+53;rt.bottom =m_nYPos+54;
::FillRect (hdc,&rt,hBrush);//botton
}
if(digit==4||digit==5||digit==0||digit==6||digit==8||digit==9)
{
rt.left =m_nXPos+9+iPos*offset;rt.right =m_nXPos+10+iPos*offset;
rt.top =m_nYPos+12;rt.bottom =m_nYPos+32;
::FillRect (hdc,&rt,hBrush);
rt.left =m_nXPos+8+iPos*offset;rt.right =m_nXPos+11+iPos*offset;
rt.top =m_nYPos+13;rt.bottom =m_nYPos+31;
::FillRect (hdc,&rt,hBrush);//top left
}
if(digit==1||digit==2 || digit==3||digit==4||digit==0||digit==7||digit==8||digit==9)
{
rt.left =m_nXPos+9+23+iPos*offset;rt.right =m_nXPos+10+23+iPos*offset;
rt.top =m_nYPos+12;rt.bottom =m_nYPos+32;
::FillRect (hdc,&rt,hBrush);
rt.left =m_nXPos+8+23+iPos*offset;rt.right =m_nXPos+11+23+iPos*offset;
rt.top =m_nYPos+13;rt.bottom =m_nYPos+31;
::FillRect (hdc,&rt,hBrush);//top right
}
if(digit==2||digit==0||digit==6||digit==8)
{
rt.left =m_nXPos+9+iPos*offset;rt.right =m_nXPos+10+iPos*offset;
rt.top =m_nYPos+12+22;rt.bottom =m_nYPos+32+22;
::FillRect (hdc,&rt,hBrush);
rt.left =m_nXPos+8+iPos*offset;rt.right =m_nXPos+11+iPos*offset;
rt.top =m_nYPos+13+22;rt.bottom =m_nYPos+31+22;
::FillRect (hdc,&rt,hBrush);//bottom left
}
if(digit==1|| digit==3||digit==4||digit==5||digit==0||digit==6||digit==7||digit==8||digit==9)
{
rt.left =m_nXPos+9+23+iPos*offset;rt.right =m_nXPos+10+23+iPos*offset;
rt.top =m_nYPos+12+22;rt.bottom =m_nYPos+32+22;
::FillRect (hdc,&rt,hBrush);
rt.left =m_nXPos+8+23+iPos*offset;rt.right =m_nXPos+11+23+iPos*offset;
rt.top =m_nYPos+13+22;rt.bottom =m_nYPos+31+22;
::FillRect (hdc,&rt,hBrush);//bottom right
}
DeleteObject(hBrush);
}
void DigitalLCDClass::Display(HDC hdc, char *cData)
{
RECT rt;
int nLength=(int)::strlen (cData);
if(nLength>m_nItem) nLength=m_nItem;
rt.left =m_nXPos+6;rt.right =m_nXPos+32+(m_nItem-1)*35+4;
rt.top =m_nYPos+8;rt.bottom =m_nYPos+58;
FillRect(hdc,&rt,(HBRUSH)GetStockObject(4));
for(int i=0;i<m_nItem;i++)
{
DrawDigit(hdc,8,i,RGB(55,55,55));
}
for(i=nLength-1;i>=0;i--)
DrawDigit(hdc,cData[i]-'0',(m_nItem-nLength)+i,col);
}
BOOL DigitalLCDClass::SetItem(int iItem)
{
if(iItem<80)
m_nItem=iItem;
else
return false;
return true;
}
BOOL DigitalLCDClass::SetPos(int xPos, int yPos)
{
m_nXPos=xPos;
m_nYPos=yPos;
return true;
}
BOOL DigitalLCDClass::SetColor(COLORREF rgb)
{
col=rgb;
return true;
}
BOOL DigitalLCDClass::Init()
{
msg=(char*)malloc(80);
if(!msg) return false;
memset(msg,'\0',80);
return true;
}
void DigitalLCDClass::UpdateData(HDC hdc)
{
if(msg)
Display(hdc,msg);
}
BOOL DigitalLCDClass::SetText(char *cMsg)
{
if(msg)
memcpy(msg,cMsg,strlen(cMsg));
return false;
return false;
}
void DigitalLCDClass::Clear()
{
if(msg)
memset(msg,0,strlen(msg));
}