windows窗口底色漸變

網上搜集到的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)));
}
相關文章
相關標籤/搜索