⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textprogressctrl.cpp

📁 vc座的资源管理器源代码
💻 CPP
字号:
// TextProgressCtrl.cpp : implementation file
//
// Written by Chris Maunder (cmaunder@mail.com)
// 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("%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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -