📄 macprogressctrl.cpp
字号:
pDC->LineTo(nXpos2, nYpos + nHeight + 7);
pDC->SelectPen(m_penColorLighter.m_hPen);
pDC->MoveTo(nXpos1, nYpos + 4);
pDC->LineTo(nXpos2, nYpos + nHeight + 4);
pDC->MoveTo(nXpos1, nYpos + 6);
pDC->LineTo(nXpos2, nYpos + nHeight + 6);
} // for the number of bands
} // if indeterminate
else
{
if (nHeight > 3)
{
pDC->MoveTo(nLeft, nTop + 1);
pDC->LineTo(nLeft, nTop);
pDC->LineTo(nRight, nTop);
pDC->MoveTo(nLeft + 1, nBottom - 2);
pDC->LineTo(nLeft + 1, nTop + 1);
pDC->MoveTo(nRight - 3, nBottom - 3);
pDC->LineTo(nRight - 3, nTop + 1);
pDC->SetPixel(nRight - 2, nTop + 1, m_crColor);
pDC->SelectPen(m_penColorLight.m_hPen);
pDC->MoveTo(nLeft + 2, nBottom - 3);
pDC->LineTo(nLeft + 2, nTop + 1);
pDC->MoveTo(nRight - 4, nBottom - 3);
pDC->LineTo(nRight - 4, nTop + 1);
pDC->SetPixel(nLeft + 1, nTop + 1, m_crColorLight);
pDC->SetPixel(nRight - 3, nTop + 1, m_crColorLight);
pDC->SelectPen(m_penColorLighter.m_hPen);
pDC->MoveTo(nLeft + 3, nBottom - 3);
pDC->LineTo(nLeft + 3, nTop + 1);
pDC->MoveTo(nRight - 5, nBottom - 3);
pDC->LineTo(nRight - 5, nTop + 1);
pDC->SetPixel(nLeft + 2, nTop + 1, m_crColorLighter);
pDC->SetPixel(nRight - 4, nTop + 1, m_crColorLighter);
pDC->SelectPen(m_penColorDark.m_hPen);
pDC->MoveTo(nLeft, nBottom - 1);
pDC->LineTo(nLeft, nTop + 1);
pDC->MoveTo(nLeft + 2, nBottom - 2);
pDC->LineTo(nRight - 2, nBottom - 2);
pDC->LineTo(nRight - 2, nTop + 1);
pDC->SetPixel(nRight - 1, nTop + 1, m_crColorDark);
pDC->SelectPen(m_penColorDarker.m_hPen);
pDC->MoveTo(nLeft + 1, nBottom - 1);
pDC->LineTo(nRight - 1, nBottom - 1);
pDC->LineTo(nRight - 1, nTop + 1);
}
else
{
CBrush br;
br.CreateSolidBrush(m_crColor);
CBrush pOldBrush;
pOldBrush.Attach(pDC->SelectBrush(br.m_hBrush));
pDC->SelectPen(m_penColorDark.m_hPen);
pDC->Rectangle(rect);
pDC->SelectBrush(pOldBrush.m_hBrush);
}
} // if not indeterminate
pDC->SelectPen(pOldPen.m_hPen);
} // DrawVerticalBar
//-------------------------------------------------------------------
//
void CMacProgressCtrl::GetColors()
//
// Return Value: None.
//
// Parameters : None.
//
// Remarks : Calculates the lighter and darker colors, as well as
// the shadow colors.
//
{
m_crColorLight = LightenColor(m_crColor, 51);
m_crColorLighter = LightenColor(m_crColorLight, 51);
m_crColorLightest = LightenColor(m_crColorLighter, 51);
m_crColorDark = DarkenColor(m_crColor, 51);
m_crColorDarker = DarkenColor(m_crColorDark, 51);
m_crDkShadow = ::GetSysColor(COLOR_3DDKSHADOW);
m_crLiteShadow = ::GetSysColor(COLOR_3DSHADOW);
// Get a color halfway between COLOR_3DDKSHADOW and COLOR_3DSHADOW
BYTE byRed3DDkShadow = GetRValue(m_crDkShadow);
BYTE byRed3DLiteShadow = GetRValue(m_crLiteShadow);
BYTE byGreen3DDkShadow = GetGValue(m_crDkShadow);
BYTE byGreen3DLiteShadow = GetGValue(m_crLiteShadow);
BYTE byBlue3DDkShadow = GetBValue(m_crDkShadow);
BYTE byBlue3DLiteShadow = GetBValue(m_crLiteShadow);
m_crShadow = RGB(byRed3DLiteShadow + ((byRed3DDkShadow - byRed3DLiteShadow) >> 1),
byGreen3DLiteShadow + ((byGreen3DDkShadow - byGreen3DLiteShadow) >> 1),
byBlue3DLiteShadow + ((byBlue3DDkShadow - byBlue3DLiteShadow) >> 1));
} // GetColors
//-------------------------------------------------------------------
//
void CMacProgressCtrl::SetColor(COLORREF crColor)
//
// Return Value: None.
//
// Parameters : crColor - New color.
//
// Remarks : Sets the progress bar control's color. The lighter
// darker colors are recalculated, and the pens recreated.
//
{
m_crColor = crColor;
GetColors();
CreatePens();
RedrawWindow();
} // SetColor
//-------------------------------------------------------------------
//
COLORREF CMacProgressCtrl::GetColor()
//
// Return Value: The current color.
//
// Parameters : None.
//
// Remarks : Returns the progress bar control's current color.
//
{
return m_crColor;
} // GetColor
//-------------------------------------------------------------------
//
void CMacProgressCtrl::CreatePens()
//
// Return Value: None.
//
// Parameters : None.
//
// Remarks : Deletes the pen objects, if necessary, and creates them.
//
{
DeletePens();
m_penColorLight.CreatePen(PS_SOLID, 1, m_crColorLight);
m_penColorLighter.CreatePen(PS_SOLID, 1, m_crColorLighter);
m_penColor.CreatePen(PS_SOLID, 1, m_crColor);
m_penColorDark.CreatePen(PS_SOLID, 1, m_crColorDark);
m_penColorDarker.CreatePen(PS_SOLID, 1, m_crColorDarker);
m_penDkShadow.CreatePen(PS_SOLID, 1, m_crDkShadow);
m_penShadow.CreatePen(PS_SOLID, 1, m_crShadow);
m_penLiteShadow.CreatePen(PS_SOLID, 1, m_crLiteShadow);
} // CreatePens
//-------------------------------------------------------------------
//
void CMacProgressCtrl::DeletePens()
//
// Return Value: None.
//
// Parameters : None.
//
// Remarks : Deletes the pen objects.
//
{
if (m_penColorLight.m_hPen)
m_penColorLight.DeleteObject();
if (m_penColorLighter.m_hPen)
m_penColorLighter.DeleteObject();
if (m_penColor.m_hPen)
m_penColor.DeleteObject();
if (m_penColorDark.m_hPen)
m_penColorDark.DeleteObject();
if (m_penColorDarker.m_hPen)
m_penColorDarker.DeleteObject();
if (m_penDkShadow.m_hPen)
m_penDkShadow.DeleteObject();
if (m_penShadow.m_hPen)
m_penShadow.DeleteObject();
if (m_penLiteShadow.m_hPen)
m_penLiteShadow.DeleteObject();
} // DeletePens
//-------------------------------------------------------------------
//
void CMacProgressCtrl::SetIndeterminate(BOOL bIndeterminate)
//
// Return Value: None.
//
// Parameters : bIndeterminate - Specifies the indeterminate state.
//
// Remarks : Sets the indeterminate flag.
//
{
m_bIndeterminate = bIndeterminate;
if (m_bIndeterminate)
{
CRect rect;
GetClientRect(rect);
m_nIndOffset = 0;
RedrawWindow();
SetTimer(IDT_INDETERMINATE, 25);
}
else
{
KillTimer(IDT_INDETERMINATE);
RedrawWindow();
}
} // SetIndeterminate
//-------------------------------------------------------------------
//
BOOL CMacProgressCtrl::GetIndeterminate()
//
// Return Value: m_bIndeterminate.
//
// Parameters : None.
//
// Remarks : Returns m_bIndeterminate.
//
{
return m_bIndeterminate;
} // GetIndeterminate
LRESULT CMacProgressCtrl::OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return TRUE;
}
LRESULT CMacProgressCtrl::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CPaintDC dcPaint(m_hWnd); // device context for painting
CRect rect, rectClient;
GetClientRect(rectClient);
rect = rectClient;
BOOL bVertical = GetStyle() & PBS_VERTICAL;
// Create a memory DC for drawing.
CDC dc;
dc.CreateCompatibleDC(dcPaint.m_hDC);
int nSavedDC = dc.SaveDC();
CBitmap bmp;
bmp.CreateCompatibleBitmap(dcPaint.m_hDC, rect.Width(), rect.Height());
CBitmap pOldBmp;
pOldBmp.Attach(dc.SelectBitmap(bmp.m_hBitmap));
CBrush br1;
br1.CreateSolidBrush(m_crColorLightest);
CBrush br2;
br2.CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
dc.FillRect(rect, (HBRUSH)br2);
int nLower, nUpper;
nLower = (int)::SendMessage(m_hWnd, TBM_GETRANGEMIN, 0, 0L);
nUpper = (int)::SendMessage(m_hWnd, TBM_GETRANGEMAX, 0, 0L);
// Determine the size of the bar and draw it.
if (bVertical)
{
if (!m_bIndeterminate)
rect.top = rect.bottom - int(((float)rect.Height() * float(GetPos() - nLower)) / float(nUpper - nLower));
dc.FillRect(rect, (HBRUSH)br1);
DrawVerticalBar(&dc, rect);
}
else
{
if (!m_bIndeterminate)
rect.right = int(((float)rect.Width() * float(GetPos() - nLower)) / float(nUpper - nLower));
dc.FillRect(rect, (HBRUSH)br1);
DrawHorizontalBar(&dc, rect);
}
dcPaint.BitBlt(rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(),
dc.m_hDC, rectClient.left, rectClient.top, SRCCOPY);
dc.SelectBitmap(pOldBmp.m_hBitmap);
dc.RestoreDC(nSavedDC);
dc.DeleteDC();
return 0;
}
LRESULT CMacProgressCtrl::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (wParam == IDT_INDETERMINATE)
{
KillTimer(wParam);
if (++m_nIndOffset > IND_BAND_WIDTH - 1)
m_nIndOffset = 0;
RedrawWindow();
SetTimer(IDT_INDETERMINATE, 25);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -