void CBaseinfoDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
CDC* pDC = &dc;
CRect rect;
GetClientRect(&rect);
CDC dcBAK;
CBitmap map;
dcBAK.CreateCompatibleDC(pDC);
map.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
CBitmap*poldbmp=dcBAK.SelectObject(&map);
int r1=217,g1=236,b1=235;
int r2=130, g2=182, b2=235;
//從上到下漸變
for (int i = 0;i < rect.Height();i++)
{
int r,g,b;
r = r1 + (i * (r2-r1) / rect.Height());
g = g1 + (i * (g2-g1) / rect.Height());
b = b1 + (i * (b2-b1) / rect.Height());
dcBAK.FillSolidRect(0,i,rect.Height(),1,RGB(r,g,b));
}
//----------繪畫
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcBAK,0,0,SRCCOPY);
dcBAK.SelectObject(poldbmp);
}
如果想實現如下圖所示的,從左到右的漸變,改變上面的for迴圈裡的程式碼即可,程式碼如下:
實現的從左到右漸變的效果
//從上到下漸變
for(int i=0;i<rect.Width();i++){int r,g,b;r = r1 + (i * (r2-r1) / rect.Width());g = g1 + (i * (g2-g1) / rect.Width());b = b1 + (i * (b2-b1) / rect.Width());dcBAK.FillSolidRect(i,0,1,rect.Height(),RGB(r,g,b));