Tuesday, September 9, 2008

Draw a Gradient Rectangle in MFC

void CEMCHotButton::DrawGradientRect (CDC *pDC, CRect r, COLORREF cLeft, COLORREF cRight, BOOL bVertical)

{

CRect stepR; // rectangle for color's band

COLORREF color; // color for the bands

float fStep;

if(bVertical)

fStep = ((float)r.Height())/255.0f;

else

fStep = ((float)r.Width())/255.0f; // width of color's band

for (int iOnBand = 0; iOnBand <>

{

// set current band

if(bVertical)

{

SetRect(&stepR,

r.left,

r.top+(int)(iOnBand * fStep),

r.right,

r.top+(int)((iOnBand+1)* fStep));

}

else

{

SetRect(&stepR,

r.left+(int)(iOnBand * fStep),

r.top,

r.left+(int)((iOnBand+1)* fStep),

r.bottom);

}

// set current color

color = RGB((GetRValue(cRight)-GetRValue(cLeft))*((float)iOnBand)/255.0f+GetRValue(cLeft),

(GetGValue(cRight)-GetGValue(cLeft))*((float)iOnBand)/255.0f+GetGValue(cLeft),

(GetBValue(cRight)-GetBValue(cLeft))*((float)iOnBand)/255.0f+GetBValue(cLeft));

// fill current band

pDC->FillSolidRect(stepR,color);

}

}

No comments: