mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-31 04:13:37 +00:00
224 lines
5.5 KiB
C++
224 lines
5.5 KiB
C++
// TextProgressCtrl.cpp : implementation file
|
|
//
|
|
// Written by Chris Maunder ([email protected])
|
|
// Copyright 1998.
|
|
//
|
|
// TextProgressCtrl is a drop-in replacement for the standard
|
|
// CProgressCtrl that displays text in a progress control.
|
|
//
|
|
// This code may be used in compiled form in any way you desire. This
|
|
// file may be redistributed by any means PROVIDING it is not sold for
|
|
// profit without the authors written consent, and providing that this
|
|
// notice and the authors name is included. If the source code in
|
|
// this file is used in any commercial application then an email to
|
|
// the me would be nice.
|
|
//
|
|
// This file is provided "as is" with no expressed or implied warranty.
|
|
// The author accepts no liability if it causes any damage to your
|
|
// computer or anything else vaguely within it's vicinity.
|
|
//
|
|
// Expect bugs.
|
|
//
|
|
// Please use and enjoy. Please let me know of any bugs/mods/improvements
|
|
// that you have found/implemented and I will fix/incorporate them into this
|
|
// file.
|
|
// Modified by Philip Oldaker 2000
|
|
|
|
#include "stdafx.h"
|
|
#include "TextProgressCtrl.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
IMPLEMENT_DYNAMIC(CTextProgressCtrl,CUIODColumnCtrl)
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CTextProgressCtrl
|
|
|
|
CTextProgressCtrl::CTextProgressCtrl()
|
|
{
|
|
m_nPos = 0;
|
|
m_nStepSize = 1;
|
|
m_nMax = 100;
|
|
m_nMin = 0;
|
|
m_bShowText = TRUE;
|
|
m_crBarClr = CLR_DEFAULT;
|
|
m_crBgClr = CLR_DEFAULT;
|
|
m_crTextClr = CLR_DEFAULT;
|
|
m_crSelBarClr = CLR_DEFAULT;
|
|
m_crSelBgClr = CLR_DEFAULT;
|
|
m_crSelTextClr = CLR_DEFAULT;
|
|
}
|
|
|
|
CTextProgressCtrl::~CTextProgressCtrl()
|
|
{
|
|
}
|
|
|
|
void CTextProgressCtrl::DoPaint(CDC *PaintDC,CRect rcClient,bool bSelected)
|
|
{
|
|
if (m_nMin >= m_nMax)
|
|
return;
|
|
|
|
bool bInvert=bSelected;
|
|
COLORREF crBarColour = (m_crBarClr == CLR_DEFAULT)? RGB(10,20,200) : m_crBarClr;
|
|
COLORREF crBgColour = (m_crBgClr == CLR_DEFAULT)? ::GetSysColor(COLOR_MENU) : m_crBgClr;
|
|
COLORREF crTextColor = (m_crTextClr == CLR_DEFAULT)? ::GetSysColor(COLOR_BTNTEXT) : m_crTextClr;
|
|
if (bSelected)
|
|
{
|
|
if (m_crSelBarClr != CLR_DEFAULT)
|
|
{
|
|
crBarColour = m_crSelBarClr;
|
|
bInvert = false;
|
|
}
|
|
if (m_crSelBgClr != CLR_DEFAULT)
|
|
{
|
|
crBgColour = m_crSelBgClr;
|
|
bInvert = false;
|
|
}
|
|
if (m_crSelTextClr != CLR_DEFAULT)
|
|
{
|
|
crTextColor = m_crSelTextClr;
|
|
bInvert = false;
|
|
}
|
|
}
|
|
double Fraction = (double)(m_nPos - m_nMin) / ((double)(m_nMax - m_nMin));
|
|
|
|
CDC &dc = *PaintDC;
|
|
dc.Rectangle(rcClient.left+1,rcClient.top+1,rcClient.right-1,rcClient.bottom-1);
|
|
rcClient.DeflateRect(2,2);
|
|
CRect LeftRect(rcClient);
|
|
CRect RightRect(rcClient);
|
|
|
|
LeftRect.right = LeftRect.left + (int)((LeftRect.right - LeftRect.left)*Fraction);
|
|
RightRect.left = LeftRect.right;
|
|
dc.FillSolidRect(LeftRect, crBarColour);
|
|
dc.FillSolidRect(RightRect, crBgColour);
|
|
// Draw Text if not vertical
|
|
if (m_bShowText)
|
|
{
|
|
CString str;
|
|
if (m_strText.GetLength())
|
|
str = m_strText;
|
|
else
|
|
str.Format(_T("%d%%"), (int)(Fraction*100.0));
|
|
CSize sz = dc.GetTextExtent(str);
|
|
int nTextPos = 0;
|
|
if (rcClient.Width() > sz.cx)
|
|
nTextPos = (rcClient.Width() - sz.cx) / 2;
|
|
if (!bSelected && LeftRect.Width() >= nTextPos)
|
|
{
|
|
dc.SetTextColor(RGB(255,255,255));
|
|
}
|
|
else
|
|
dc.SetTextColor(crTextColor);
|
|
dc.SetBkMode(TRANSPARENT);
|
|
DWORD dwTextStyle = DT_CENTER | DT_VCENTER | DT_SINGLELINE;
|
|
dc.DrawText(str, rcClient, dwTextStyle);
|
|
}
|
|
if (bInvert)
|
|
{
|
|
dc.InvertRect(rcClient);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CTextProgressCtrl operations
|
|
|
|
void CTextProgressCtrl::SetShowText(BOOL bShow)
|
|
{
|
|
m_bShowText = bShow;
|
|
}
|
|
|
|
void CTextProgressCtrl::SetRange(int nLower, int nUpper)
|
|
{
|
|
m_nMax = nUpper;
|
|
m_nMin = nLower;
|
|
}
|
|
|
|
void CTextProgressCtrl::GetRange(int& nLower, int& nUpper) const
|
|
{
|
|
nUpper = m_nMax;
|
|
nLower = m_nMin;
|
|
}
|
|
|
|
int CTextProgressCtrl::SetPos(int nPos)
|
|
{
|
|
int nOldPos = m_nPos;
|
|
m_nPos = nPos;
|
|
return nOldPos;
|
|
}
|
|
|
|
int CTextProgressCtrl::StepIt()
|
|
{
|
|
return SetPos(m_nPos + m_nStepSize);
|
|
}
|
|
|
|
int CTextProgressCtrl::OffsetPos(int nPos)
|
|
{
|
|
return SetPos(m_nPos + nPos);
|
|
}
|
|
|
|
int CTextProgressCtrl::SetStep(int nStep)
|
|
{
|
|
int nOldStep = m_nStepSize;
|
|
m_nStepSize = nStep;
|
|
return nOldStep;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::SetBarColor(COLORREF crBarClr /*= CLR_DEFAULT*/,COLORREF crSelBarClr /*= CLR_DEFAULT*/)
|
|
{
|
|
COLORREF crOldBarClr = m_crBarClr;
|
|
m_crBarClr = crBarClr;
|
|
m_crSelBarClr = crSelBarClr;
|
|
return crOldBarClr;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::GetBarColor() const
|
|
{
|
|
return m_crBarClr;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::GetSelBarColor() const
|
|
{
|
|
return m_crSelBarClr;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::SetBgColor(COLORREF crBgClr /*= CLR_DEFAULT*/,COLORREF crSelBgClr /*= CLR_DEFAULT*/)
|
|
{
|
|
COLORREF crOldBgClr = m_crBgClr;
|
|
m_crBgClr = crBgClr;
|
|
m_crSelBgClr = crSelBgClr;
|
|
return crOldBgClr;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::GetBgColor() const
|
|
{
|
|
return m_crBgClr;
|
|
}
|
|
|
|
|
|
COLORREF CTextProgressCtrl::GetSelBgColor() const
|
|
{
|
|
return m_crSelBgClr;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::SetTextColor(COLORREF crTextClr /*= CLR_DEFAULT*/,COLORREF crSelTextClr /*= CLR_DEFAULT*/)
|
|
{
|
|
COLORREF crOldTextClr = m_crTextClr;
|
|
m_crTextClr = crTextClr;
|
|
m_crSelTextClr = crSelTextClr;
|
|
return crOldTextClr;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::GetTextColor() const
|
|
{
|
|
return m_crTextClr;
|
|
}
|
|
|
|
COLORREF CTextProgressCtrl::GetSelTextColor() const
|
|
{
|
|
return m_crSelTextClr;
|
|
}
|