1. 程式人生 > >MFC 對話方塊實現 背景色漸變

MFC 對話方塊實現 背景色漸變

mfc實現某對話方塊背景色漸變

如果是單文件檢視結構,在OnDraw實現程式碼,如果是對話方塊結構,在該對話方塊所在的cpp裡的OnPain函式【如果沒有這個函式,請在類嚮導裡派生】裡實現如下程式碼即可,本示例是在對話方塊結構,某個對話方塊裡實現的,效果如下附圖


實現的從上到下漸變效果

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<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));
}