📄 staticcounter.cpp
字号:
// StaticCounter.cpp : implementation file
//
#include "stdafx.h"
#include "RichiMP3.h"
#include "StaticCounter.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStaticCounter
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
CStaticCounter::CStaticCounter()
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
// Set the default foreground (text) color:
m_bDrawFadedNotches = true;
// Set the default foreground (text) color:
m_crColorForeground = 0x0000FF00; //::GetSysColor(COLOR_BTNTEXT);
// Set the default background color:
m_crColorBackground = 0; //::GetSysColor(COLOR_BTNFACE);
// Set default background brush
m_brBackground.CreateSolidBrush(m_crColorBackground);
// Set default background brush
m_brForeground.CreateSolidBrush(m_crColorForeground);
m_strNumber = "0";
m_bGotMetrics = false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
CStaticCounter::~CStaticCounter()
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
BOOL CStaticCounter::OnEraseBkgnd(CDC* pDC)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{ return FALSE; }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
void CStaticCounter::SetColorBackGround(COLORREF crColor)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
// Set new background color
if (crColor != 0xffffffff)
m_crColorBackground = crColor;
else // Set default background color
m_crColorBackground = ::GetSysColor(COLOR_BTNFACE);
m_brBackground.DeleteObject();
m_brBackground.CreateSolidBrush(m_crColorBackground);
Invalidate();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
void CStaticCounter::SetColorForeGround(COLORREF crColor)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
// Set new foreground color
if (crColor != 0xffffffff)
{
m_crColorForeground = crColor;
}
else // Set default foreground color
{
m_crColorForeground = ::GetSysColor(COLOR_BTNTEXT);
}
// Repaint control
Invalidate(FALSE);
}
BEGIN_MESSAGE_MAP(CStaticCounter, CStatic)
//{{AFX_MSG_MAP(CStaticCounter)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStaticCounter message handlers
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
HBRUSH CStaticCounter::CtlColor(CDC* pDC, UINT nCtlColor)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
// pDC->SetTextColor(m_crColorForeground);
// pDC->SetBkColor(m_crColorBackground);
return (HBRUSH)m_brBackground; // Return non-NULL brush - the parent's handler is not called
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
void CStaticCounter::OnPaint()
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
GetClientRect(&m_recClient);
CPaintDC dc(this);
CMemDC memDC(&dc, m_recClient);
CMemDC* pDC = &memDC;
CRect clip;
pDC->GetClipBox(&clip);
pDC->FillSolidRect(&m_recClient, m_crColorBackground );
for (int nCount = 0; nCount< m_strNumber.GetLength(); nCount++)
{
if (m_bDrawFadedNotches)
Draw( pDC, STCOUNTERALL, nCount ); // Draw the faded bits
CString str = m_strNumber[nCount];
if ( m_strNumber[nCount] == '0' ) Draw( pDC, STCOUNTER0, nCount );
else if ( m_strNumber[nCount] == '1' ) Draw( pDC, STCOUNTER1, nCount );
else if ( m_strNumber[nCount] == '2' ) Draw( pDC, STCOUNTER2, nCount );
else if ( m_strNumber[nCount] == '3' ) Draw( pDC, STCOUNTER3, nCount );
else if ( m_strNumber[nCount] == '4' ) Draw( pDC, STCOUNTER4, nCount );
else if ( m_strNumber[nCount] == '5' ) Draw( pDC, STCOUNTER5, nCount );
else if ( m_strNumber[nCount] == '6' ) Draw( pDC, STCOUNTER6, nCount );
else if ( m_strNumber[nCount] == '7' ) Draw( pDC, STCOUNTER7, nCount );
else if ( m_strNumber[nCount] == '8' ) Draw( pDC, STCOUNTER8, nCount );
else if ( m_strNumber[nCount] == '9' ) Draw( pDC, STCOUNTER9, nCount );
else if ( m_strNumber[nCount] == ':' ) Draw( pDC, STCOUNTER10,nCount );
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
void CStaticCounter::Draw(CMemDC* pDC, DWORD dwChar, int nCol)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
if (!m_bGotMetrics)
{ // Calculate the character metrics in proportion to the size of the control:
int nHeight = m_recClient.bottom;
(nHeight * 0.07) < 1 ? m_nMargin = 1 : m_nMargin = (int)(nHeight * 0.07);
(nHeight * 0.35) < 1 ? m_nNotchLength = 1 : m_nNotchLength = (int)(nHeight * 0.35);
m_nNotchWidth = m_nMargin;
m_bGotMetrics = true;
}
if ( nCol > 0 ) nCol = (nCol*m_nNotchLength) + (m_nMargin*4) * nCol;
COLORREF crNotchColor = m_crColorForeground;
if (dwChar == STCOUNTERALL) { // The color used will be a dim version of normal foreground
int r = GetRValue(m_crColorForeground)/3;
int g = GetGValue(m_crColorForeground)/3;
int b = GetBValue(m_crColorForeground)/3;
crNotchColor = RGB(r,g,b);
}
// Create the Pen accordingly
CPen pen(PS_SOLID | PS_ENDCAP_ROUND, m_nNotchWidth, crNotchColor);
CPen* pOldPen=pDC->SelectObject(&pen);
if ( (dwChar & NOTCH1) || dwChar == STCOUNTERALL) { // should I draw the first bar in the display?
pDC->MoveTo( nCol + m_nMargin*2, m_nMargin );
pDC->LineTo( nCol + m_nNotchLength, m_nMargin );
}
if ( dwChar & NOTCH2 || dwChar == STCOUNTERALL) { // should I draw the 2nd bar in the display?
pDC->MoveTo(nCol + m_nNotchLength + m_nMargin, m_nMargin*2);
pDC->LineTo(nCol + m_nNotchLength + m_nMargin, m_nNotchLength + (m_nMargin*2) );
}
if ( dwChar & NOTCH3 || dwChar == STCOUNTERALL) { // should I draw the 3rd bar in the display?
pDC->MoveTo(nCol + m_nNotchLength + m_nMargin, m_nNotchLength + (m_nMargin*4) );
pDC->LineTo(nCol + m_nNotchLength + m_nMargin, m_nNotchLength*2 + (m_nMargin*3) );
}
if ( dwChar & NOTCH4 || dwChar == STCOUNTERALL) { // should I draw the 4th bar in the display?
pDC->MoveTo( nCol + m_nMargin*2, m_nNotchLength*2 + (m_nMargin*4) );
pDC->LineTo( nCol + m_nNotchLength, m_nNotchLength*2 + (m_nMargin*4) );
}
if ( dwChar & NOTCH5 || dwChar == STCOUNTERALL) { // should I draw the 5th bar in the display?
pDC->MoveTo(nCol + m_nMargin, m_nNotchLength + (m_nMargin*4) );
pDC->LineTo(nCol + m_nMargin, m_nNotchLength*2 + (m_nMargin*3) );
}
if ( dwChar & NOTCH6 || dwChar == STCOUNTERALL) { // should I draw the 6th bar in the display?
pDC->MoveTo(nCol + m_nMargin, m_nMargin*2);
pDC->LineTo(nCol + m_nMargin, m_nNotchLength + (m_nMargin*2) );
}
if ( dwChar & NOTCH7 || dwChar == STCOUNTERALL) { // should I draw the 7th bar in the display?
pDC->MoveTo(nCol + m_nMargin*2, m_nNotchLength + (m_nMargin*3) );
pDC->LineTo(nCol + m_nMargin + m_nNotchLength - m_nMargin, m_nNotchLength + (m_nMargin*3) );
}
pDC->SelectObject(pOldPen);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
void CStaticCounter::Display(int nNumber)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
m_strNumber.Format("%d", nNumber);
Invalidate(FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function Header
void CStaticCounter::SetDrawFaded(bool bState)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{
m_bDrawFadedNotches = bState;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -