DrawGradientRect(CDC* pDC, CRect& rcGradient, COLORREF clrBegin, COLORREF clrEnd)
{
COLORREF clrCptn = clrBegin;
HBRUSH brCptn = ::GetSysColorBrush(clrBegin);
int nShift = 6;
int nSteps = 1 << nShift;
for (int i = 0; i < nSteps; i++)
{
BYTE bR = (BYTE) ((GetRValue(clrCptn) * (nSteps - i) + GetRValue(clrEnd) * i) >> nShift);
BYTE bG = (BYTE) ((GetGValue(clrCptn) * (nSteps - i) + GetGValue(clrEnd) * i) >> nShift);
BYTE bB = (BYTE) ((GetBValue(clrCptn) * (nSteps - i) + GetBValue(clrEnd) * i) >> nShift);
CBrush br (RGB(bR, bG, bB));
CRect r2 = rcGradient;
r2.left = rcGradient.left + ((i * rcGradient.Width()) >> nShift);
r2.right = rcGradient.left + (((i + 1) * rcGradient.Width()) >> nShift);
if (r2.Width() > 0)
pDC->FillRect(r2, &br);
}
}