📄 colorgprogressctrl.cpp
字号:
// SwingProgressCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "ColorProgressCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
CColorProgressCtrl::CColorProgressCtrl()
{
nBkBrush.CreateSolidBrush(RGB(204, 204, 204)); //画刷
nProgressBrush.CreateSolidBrush(RGB(153, 153, 204));
nDarkBorder.CreatePen(PS_SOLID, 1, RGB(128, 128, 128)); //画笔
nWhiteBorder.CreatePen(PS_SOLID, 1, RGB(255, 255, 255));
nSelectedBorder.CreatePen(PS_SOLID, 1, RGB(153, 153, 204));
}
CColorProgressCtrl::~CColorProgressCtrl()
{
}
BEGIN_MESSAGE_MAP(CColorProgressCtrl, CProgressCtrl)
//{{AFX_MSG_MAP(CColorProgressCtrl)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CColorProgressCtrl message handlers
void CColorProgressCtrl::OnPaint()
{
CPaintDC dc(this);
BOOL bVertical = GetStyle() & PBS_VERTICAL; //是否是垂直的
CRect pRect;
GetClientRect(pRect);
pRect.DeflateRect(2, 2, 2, 2);
CRect mProgressRect(pRect); //滚动条的矩形
int nStart, nEnd;
this->GetRange(nStart, nEnd);
int nRange = nEnd - nStart;
int pos = GetPos();
CPoint rcTextRect = pRect.CenterPoint();
CSize len = dc.GetTextExtent(m_strCaption);
rcTextRect.x -= (len.cx / 2);
rcTextRect.y -= (len.cy / 2); //设置文本所占的矩形
int nPrg;
if (!bVertical) //如果是水平滚动条
{
nPrg = (pRect.Width() * pos) / nRange;
mProgressRect.right = mProgressRect.left + nPrg;
}
if (bVertical) //如果是垂直滚动条
{
nPrg = (pRect.Height() * pos) / nRange;
mProgressRect.top = mProgressRect.bottom - nPrg;
}
CRect drawRect(rcTextRect.x, rcTextRect.y, mProgressRect.right, mProgressRect.bottom);
CRect rectGrey(pRect);
if (bVertical)
{
rectGrey.bottom = mProgressRect.top;
}
else
{
rectGrey.left = mProgressRect.right;
}
dc.SelectObject(&nBkBrush);
dc.SelectStockObject(NULL_PEN);
dc.Rectangle(rectGrey);
if (!bVertical)
{
dc.SelectStockObject(DEFAULT_GUI_FONT);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(128, 128, 128));
dc.TextOut(rcTextRect.x, rcTextRect.y , m_strCaption);
dc.SetTextColor(RGB(255, 255, 255));
dc.TextOut(rcTextRect.x + 1, rcTextRect.y + 1 , m_strCaption);
dc.SelectStockObject(NULL_PEN);
dc.SelectObject(&nProgressBrush);
dc.Rectangle(mProgressRect);
dc.SetTextColor(RGB(60, 60, 80));
dc.DrawText(m_strCaption, drawRect, DT_LEFT );
dc.SetTextColor(RGB(255, 255, 255));
drawRect.left += 1;
drawRect.top += 1;
dc.DrawText(m_strCaption, drawRect, DT_LEFT );
}
else
{
dc.SelectStockObject(NULL_PEN);
dc.SelectObject(&nProgressBrush);
dc.Rectangle(mProgressRect);
}
}
void CColorProgressCtrl::SetText(CString strText)
{
m_strCaption = strText;
}
CString CColorProgressCtrl::GetText()
{
return m_strCaption;
}
BOOL CColorProgressCtrl::OnEraseBkgnd(CDC* pDC)
{
CDC *gDC = pDC;
pDC = GetWindowDC();
CRect rectItem, mRect;
GetWindowRect(mRect);
GetParent()->ClientToScreen(rectItem);
GetClientRect(rectItem);
rectItem.right = rectItem.left + mRect.Width();
rectItem.bottom = rectItem.top + mRect.Height();
CPoint TopLeft(rectItem.left, rectItem.top);
CPoint BottomRight(rectItem.right - 1, rectItem.bottom - 1);
CPoint TopRight(rectItem.right - 1, rectItem.top);
CPoint BottomLeft(rectItem.left, rectItem.bottom - 1);
pDC->SelectObject(&nDarkBorder);
pDC->MoveTo(TopLeft);
pDC->LineTo(TopRight);
pDC->MoveTo(TopLeft);
pDC->LineTo(BottomLeft);
pDC->MoveTo(BottomLeft.x, BottomLeft.y - 1);
pDC->LineTo(BottomRight.x, BottomRight.y - 1);
pDC->MoveTo(BottomRight.x - 1, BottomRight.y);
pDC->LineTo(TopRight.x - 1, TopRight.y);
pDC->SelectObject(&nWhiteBorder);
pDC->MoveTo(BottomLeft);
pDC->LineTo(BottomRight);
pDC->MoveTo(BottomRight);
pDC->LineTo(TopRight);
pDC->MoveTo(TopLeft.x + 1, TopLeft.y + 1);
pDC->LineTo(TopRight.x - 1, TopRight.y + 1);
pDC->MoveTo(TopLeft.x + 1, TopLeft.y + 1);
pDC->LineTo(BottomLeft.x + 1, BottomLeft.y - 1);
ReleaseDC(pDC);
pDC = gDC;
return TRUE;
// return CProgressCtrl::OnEraseBkgnd(pDC); //去掉默认的返回值
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -