MFC 对话框实现 背景色渐变

mfc实现某对话框背景色渐变

如果是单文档视图结构,在OnDraw实现代码,如果是对话框结构,在该对话框所在的cpp里的OnPain函数【如果没有这个函数,请在类向导里派生】里实现如下代码即可,本示例是在对话框结构,某个对话框里实现的,效果如下附图


MFC 对话框实现 背景色渐变_第1张图片

实现的从上到下渐变效果

void CBaseinfoDialog::OnPaint() { CPaintDC dc(this); // device context for painting

CDC* pDC = &dc; 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=217,g1=236,b1=235; int r2=130, g2=182, b2=235;

//从上到下渐变 for (int i = 0;i < rect.Height();i++) { int r,g,b; r = r1 + (i * (r2-r1) / rect.Height()); g = g1 + (i * (g2-g1) / rect.Height()); b = b1 + (i * (b2-b1) / rect.Height()); dcBAK.FillSolidRect(0,i,rect.Height(),1,RGB(r,g,b)); } //----------绘画 pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcBAK,0,0,SRCCOPY); dcBAK.SelectObject(poldbmp); }


如果想实现如下图所示的,从左到右的渐变,改变上面的for循环里的代码即可,代码如下:

                                  

实现的从左到右渐变的效果

//从上到下渐变

for(int i=0;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));
}

你可能感兴趣的:(对话框背景色渐变)