代码改变世界

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

2015-06-04 11:22  P.C ++  阅读(416)  评论(1编辑  收藏  举报
 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对话框上贴背景,如果有圆角背景图片,边角会做成透明,在生成时背景时,透明处先取底色作为边角颜色,以至于在图片位置改变时或背景改变时原本透明的地方跟其他地方不和谐,造成毛刺。

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