khanat-opennel-code/code/nelns/login_system/nel_launcher_windows_ext/BarWnd.cpp
2010-05-06 02:08:41 +02:00

90 lines
1.7 KiB
C++

// BarWnd.cpp : implementation file
//
#include "stdafx.h"
#include "nel_launcher.h"
#include "BarWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*#define R1 50
#define G1 169
#define B1 143*/
#define R1 20
#define G1 70
#define B1 50
#define R2 0
#define G2 255
#define B2 192
/////////////////////////////////////////////////////////////////////////////
// CBarWnd
CBarWnd::CBarWnd()
{
m_iPos = 0;
m_iRange = 100;
}
CBarWnd::~CBarWnd()
{
}
BEGIN_MESSAGE_MAP(CBarWnd, CWnd)
//{{AFX_MSG_MAP(CBarWnd)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBarWnd message handlers
void CBarWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect r;
GetClientRect(&r);
if(r.Width() == 0 || m_iRange == 0)
return;
int iWidth = m_iPos * r.Width() / m_iRange;
double iRatio;
int iR, iG, iB;
for(int i = 0; i < iWidth; i++)
{
iRatio = double(i) / double(r.Width());
iR = int(iRatio * (R2 - R1) + R1);
iG = int(iRatio * (G2 - G1) + G1);
iB = int(iRatio * (B2 - B1) + B1);
if(i < 3)
dc.FillSolidRect(i+1, 0, 1, r.Height(), RGB(iR/1.5, iG/1.5, iB/1.5));
else
{
dc.FillSolidRect(i+1, 0, 1, r.Height(), RGB(iR, iG, iB));
dc.SetPixelV(i+1, 0, RGB(iR/1.5, iG/1.5, iB/1.5));
dc.SetPixelV(i+1, 1, RGB(iR/1.5, iG/1.5, iB/1.5));
}
}
dc.FillSolidRect(iWidth+1, 0, r.Width() - iWidth-2, r.Height(), RGB(0, 32, 0));
}
void CBarWnd::SetRange(int iRange)
{
m_iRange = iRange;
}
void CBarWnd::UpdatePos(int iPos)
{
m_iPos = iPos;
Invalidate(FALSE);
}