您的位置:首页 > 编程语言 > C语言/C++

VC++窗体背景颜色渐变

2007-05-07 16:47 267 查看
新建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;
}

闪烁问题解决了! ^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vc++ mfc windows