VC++窗体背景颜色渐变

来源:互联网 发布:神机妙算套价软件 编辑:程序博客网 时间:2024/05/23 14:24
新建MFC工程
修改View类的OnDraw方法
void CJBView::OnDraw(CDC* pDC)
{
    CJBDoc
* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    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=128,g1=200,b1=200
    int r2=100,  g2=55, b2=165;
    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));
    }
    
//----------绘画
    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcBAK,0,0,SRCCOPY);
    dcBAK.SelectObject(poldbmp); 
}

通过以上方法产生了一个从左向右的渐变的窗体

Remarks:
通过拖拽窗体大小,发现闪烁厉害,以上方法不能解决闪烁问题
对策:给View类添加Add Windows Message handle
增加:WM_ERASEBKGND
BOOL CJBView::OnEraseBkgnd(CDC* pDC) 
{
    
return 1;
}

闪烁问题解决了! ^_^
原创粉丝点击