我在OnDraw()中这样处理重画动作,按理应该没有闪烁了,但是实际的运行效果仍不佳,请问哪里有问题吗?
void CChartView::OnDraw(CDC* pDC)
{
CPWODoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
RECT cRect ;
GetClientRect(&cRect) ;
pDC->DPtoLP(&cRect) ;
SetRepaintRect(cRect) ;
CDC dc;
CBitmap bitmap;
CBitmap* pOldBitmap;
CRect client;
CRect rect;
pDC->GetClipBox(client);
GetClientRect(rect); if(dc.CreateCompatibleDC(pDC))
{
if(bitmap.CreateCompatibleBitmap(pDC,rect.Width(),
rect.Height()))
{
OnPrepareDC(&dc,NULL);
pOldBitmap=dc.SelectObject(&bitmap);
dc.SelectClipRgn(NULL);
dc.IntersectClipRect(client);
}
} CBrush brush;
if(!brush.CreateSolidBrush(RGB(189, 216, 244)))
return ;
brush.UnrealizeObject();
dc.FillRect(client,&brush);
if(m_pOrgChart != NULL)
{
if(m_bIsFirst)
{
m_pOrgChart->Draw(&dc, E_REPOS_REPAINT) ;
m_bIsFirst = false ; }else
{
m_pOrgChart->Draw(&dc, E_NOTREPOS_REPAINT) ; } }
pDC->BitBlt(client.left,client.top,client.Width(),client.Height(),
&dc,client.left,client.top,SRCCOPY);
dc.SelectObject(pOldBitmap); }
void CChartView::OnDraw(CDC* pDC)
{
CPWODoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
RECT cRect ;
GetClientRect(&cRect) ;
pDC->DPtoLP(&cRect) ;
SetRepaintRect(cRect) ;
CDC dc;
CBitmap bitmap;
CBitmap* pOldBitmap;
CRect client;
CRect rect;
pDC->GetClipBox(client);
GetClientRect(rect); if(dc.CreateCompatibleDC(pDC))
{
if(bitmap.CreateCompatibleBitmap(pDC,rect.Width(),
rect.Height()))
{
OnPrepareDC(&dc,NULL);
pOldBitmap=dc.SelectObject(&bitmap);
dc.SelectClipRgn(NULL);
dc.IntersectClipRect(client);
}
} CBrush brush;
if(!brush.CreateSolidBrush(RGB(189, 216, 244)))
return ;
brush.UnrealizeObject();
dc.FillRect(client,&brush);
if(m_pOrgChart != NULL)
{
if(m_bIsFirst)
{
m_pOrgChart->Draw(&dc, E_REPOS_REPAINT) ;
m_bIsFirst = false ; }else
{
m_pOrgChart->Draw(&dc, E_NOTREPOS_REPAINT) ; } }
pDC->BitBlt(client.left,client.top,client.Width(),client.Height(),
&dc,client.left,client.top,SRCCOPY);
dc.SelectObject(pOldBitmap); }
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货