MFC圆角背景移动边角底色毛刺解决方案

 1    CRect rc;
 2     Graphics graphics(pDC->m_hDC);
 3     GetClientRect(&rc);
 4     CRgn m_rgn;
 5 
 6     if (m_pBgImage)
 7     {           
 8         graphics.DrawImage(m_pBgImage, 0, 0, rc.Width(), rc.Height());   //贴背景
 9     }
10     if(!m_rgn.m_hObject)
11     {
12         m_rgn.CreateRoundRectRgn((-rc.left) - 1,-rc.top,rc.right - rc.left + 2,rc.bottom - rc.top + 2,15,15);
13         SetWindowRgn(m_rgn,TRUE);
14     }

 

MFC对话框上贴背景,若是有圆角背景图片,边角会作成透明,在生成时背景时,透明处先取底色做为边角颜色,以致于在图片位置改变时或背景改变时本来透明的地方跟其余地方不和谐,形成毛刺。spa

上面代码在OnEraseBkgnd(CDC* pDC)里,让绘制的图片去边角code