Blame | Last modification | View Log | RSS feed
//************************************************************************//// LCDProgressBar.cpp//// The CLCDProgressBar class draws a progress bar onto the LCD.//// Logitech LCD SDK//// Copyright 2005 Logitech Inc.//************************************************************************#include "LCDProgressBar.h"//************************************************************************//// CLCDProgressBar::CLCDProgressBar////************************************************************************CLCDProgressBar::CLCDProgressBar(){m_fPos = 0.0f;m_eStyle = STYLE_CURSOR;m_Range.nMin = 0;m_Range.nMax = 100;m_nCursorWidth = 5;m_hPen = NULL;}//************************************************************************//// CLCDProgressBar::~CLCDProgressBar////************************************************************************CLCDProgressBar::~CLCDProgressBar(){if (m_hPen != NULL){::DeleteObject(m_hPen);m_hPen = NULL;}}//************************************************************************//// CLCDProgressBar:Initialize////************************************************************************HRESULT CLCDProgressBar::Initialize(){m_hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);m_hPen = ::CreatePen(PS_DOT, 1, RGB(255, 255, 255));return CLCDBase::Initialize();}//************************************************************************//// CLCDProgressBar::OnDraw////************************************************************************void CLCDProgressBar::OnDraw(CLCDGfx &rGfx){HPEN hOldPen;rGfx.ClearScreen();// draw the borderRECT r = { 0, 0, GetWidth(), GetHeight() };FrameRect(rGfx.GetHDC(), &r, m_hBrush);// draw the progressswitch(m_eStyle){case STYLE_CURSOR:{int nCursorPos = (int)Scalef((float)m_Range.nMin, (float)m_Range.nMax,(float)1, (float)(GetWidth() - m_nCursorWidth-1),m_fPos);r.left = nCursorPos;r.right = r.left + m_nCursorWidth;FillRect(rGfx.GetHDC(), &r, m_hBrush);}break;case STYLE_FILLED:{int nBarWidth = (int)Scalef((float)m_Range.nMin, (float)m_Range.nMax,0.0f, (float)GetWidth(),m_fPos);r.right = nBarWidth;FillRect(rGfx.GetHDC(), &r, m_hBrush);}break;case STYLE_DASHED_CURSOR:{int nCursorPos = (int)Scalef((float)m_Range.nMin, (float)m_Range.nMax,(float)1, (float)(GetWidth() - m_nCursorWidth-1),m_fPos);r.left = nCursorPos;r.right = r.left + m_nCursorWidth;FillRect(rGfx.GetHDC(), &r, m_hBrush);hOldPen = (HPEN)::SelectObject(rGfx.GetHDC(), m_hPen);::MoveToEx(rGfx.GetHDC(), 0, (r.bottom - r.top)/2, NULL);::LineTo(rGfx.GetHDC(), nCursorPos, (r.bottom - r.top)/2);::SelectObject(rGfx.GetHDC(), hOldPen);}break;default:break;}}//************************************************************************//// CLCDProgressBar::ResetUpdate////************************************************************************void CLCDProgressBar::ResetUpdate(){}//************************************************************************//// CLCDProgressBar::SetRange////************************************************************************void CLCDProgressBar::SetRange(int nMin, int nMax){m_Range.nMin = nMin;m_Range.nMax = nMax;}//************************************************************************//// CLCDProgressBar::SetRange////************************************************************************void CLCDProgressBar::SetRange(RANGE& Range){m_Range = Range;}//************************************************************************//// CLCDProgressBar::GetRange////************************************************************************RANGE& CLCDProgressBar::GetRange(){return m_Range;}//************************************************************************//// CLCDProgressBar::SetPos////************************************************************************float CLCDProgressBar::SetPos(float fPos){return ( m_fPos = max((float)m_Range.nMin, min(fPos, (float)m_Range.nMax)) );}//************************************************************************//// CLCDProgressBar::GetPos////************************************************************************float CLCDProgressBar::GetPos(){return m_fPos;}//************************************************************************//// CLCDProgressBar::EnableCursor////************************************************************************void CLCDProgressBar::EnableCursor(BOOL bEnable){m_eStyle = bEnable ? STYLE_CURSOR : STYLE_FILLED;}//************************************************************************//// CLCDProgressBar::SetProgressStyle////************************************************************************void CLCDProgressBar::SetProgressStyle(ePROGRESS_STYLE eStyle){m_eStyle = eStyle;}//************************************************************************//// CLCDProgressBar::Scalef////************************************************************************float CLCDProgressBar::Scalef(float fFromMin, float fFromMax,float fToMin, float fToMax, float fFromValue){// normalize the inputfloat fFromValueN = (fFromValue - fFromMin) / (fFromMax - fFromMin);// now scale to the outputfloat fToRange = fToMax - fToMin;return ( fToMin + (fFromValueN * fToRange) );}//************************************************************************//// CLCDProgressBar::Scale////************************************************************************int CLCDProgressBar::Scale(int nFromMin, int nFromMax,int nToMin, int nToMax, int nFromValue){return (int)Scalef((float)nFromMin,(float)nFromMax,(float)nToMin,(float)nToMax,(float)nFromValue);}//** end of LCDProgressBar.cpp *******************************************