19,468
社区成员
发帖
与我相关
我的任务
分享
CDC * pDC = GetDC();
POINT pt[9] = {{17,36},{0,70},{149,70},{132,36},{17,36}};
CRgn rgn;
rgn.CreatePolygonRgn( pt, 5, ALTERNATE );
CDC dcMem;
CBitmap Bitmap;
dcMem.CreateCompatibleDC(pDC);
Bitmap.CreateCompatibleBitmap(pDC,59,23);
CBitmap * pOldBmp=dcMem.SelectObject(&Bitmap);
int r1=128,g1=200,b1=200;
int r2=100, g2=55, b2=165;
DWORD dwSize = rgn.GetRegionData(0, NULL);
BYTE* pData=new BYTE[dwSize];
rgn.GetRegionData((LPRGNDATA)pData,dwSize);
LPRGNDATA d = (LPRGNDATA)pData;
CRect * rect = (CRect*)(d->Buffer);
int nHeight = d->rdh.nCount;
for(int i=0;i<d->rdh.nCount;i++){
int r,g,b;
r = r1 + (i * (r2-r1) / nHeight);
g = g1 + (i * (g2-g1) / nHeight);
b = b1 + (i * (b2-b1) / nHeight);
CRect aRect = rect+i;
CRect sr(0,i,aRect.Width(),i+1);
dcMem.FillSolidRect(sr,RGB(r,g,b));
pDC->BitBlt(aRect.left,aRect.top,aRect.Width(),aRect.Height(),&dcMem,0,i,SRCCOPY);
}
Bitmap.DeleteObject();
dcMem.SelectObject(pOldBmp);
dcMem.DeleteDC();