網上搜集到的2種畫漸變色的方法:數組
第一種:code
void CChatterDlg::GradientRect(CDC* pDC,CRect rc,COLORREF color1,COLORREF color2,BOOL bvh) { TRIVERTEX vert[2] ; GRADIENT_RECT gRect; vert [0] .x = rc.left;//0; vert [0] .y = rc.top;//0; vert [0] .Red = COLOR16( COLOR16( GetRValue( color1 ) ) << 8);//一個16位的顏色值,但低8位爲0 vert [0] .Green = COLOR16( COLOR16( GetGValue( color1 ) ) << 8); vert [0] .Blue = COLOR16( COLOR16( GetBValue( color1 ) ) << 8); //vert [1] .Alpha = 0x0000; vert [1] .x = rc.right; vert [1] .y = rc.bottom; vert [1] .Red = COLOR16( COLOR16( GetRValue( color2 ) ) << 8); vert [1] .Green = COLOR16( COLOR16( GetGValue( color2 ) ) << 8); vert [1] .Blue = COLOR16( COLOR16( GetBValue( color2 ) ) << 8); //vert [0] .Alpha = 0xf000; gRect.UpperLeft = 0; gRect.LowerRight = 1; GradientFill( pDC->GetSafeHdc(), //hDC是表示要填充對象的窗口句柄; vert, //pVertex經常是一個數組,用來存放各頂點的位置及顏色信息,頂點在TRIVERTEX中定義; 2, //dwNumVertex表示頂點的個數; &gRect, //pMesh也經常是一個數組結構,表示組成圖形的各頂點順序,表示一個矩形用兩個頂點,三角形要用三個頂點; 1, //dwNumMesh表示矩形或三角形的個數; bvh == TRUE ? GRADIENT_FILL_RECT_V : GRADIENT_FILL_RECT_H); //GRADIENT_FILL_RECT_H );//dwMode表示填充的模式:水平填充,垂直填充,三角形填充。 }
第二種:對象
//獲得客戶區域的填充矩形 int nWidth = rect.Width(); int nHeight = rect.Height(); CRect rectangle; //分割客戶區域成小矩形,逐個填充 for(int i=0; i<nHeight; ++i) { rectangle.SetRect(0,i,nWidth,i+1); BufferDC.FillSolidRect(&rectangle, RGB(255, 255, 255-MulDiv(i, 255, nHeight))); }