关于绘图时屏幕闪动的问题

建一内存位图+兼容DC(虚屏)
把你所有的图GDI操作放在虚屏上.
重背景处理.在背景时把虚屏的内容贴到前景.
在需要更新时,真接把虚屏往前景贴
OK.

自画式按纽
void CCJFlatButton::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 
 // KStowell - Get the client rect.
 CRect rcClient, rcClip;
 dc.GetClipBox( &rcClip );
 GetClientRect( &rcClient );

 // KStowell - Create a memory device-context. This is done to help reduce
 // screen flicker, since we will paint the entire control to the
 // off screen device context first.
 CDC memDC;
 CBitmap bitmap;
 memDC.CreateCompatibleDC(&dc);
 bitmap.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height());
 CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);

 // KStowell - Repaint the background.
 memDC.FillSolidRect(rcClient, m_clrNormal);

 // let the control do its default drawing.
 CWnd::DefWindowProc( WM_PAINT, (WPARAM)memDC.m_hDC, 0 );

 // KStowell - Copy the memory device context back into the original DC via BitBlt().
 dc.BitBlt( rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(), &memDC,
  rcClip.left, rcClip.top, SRCCOPY );

 // KStowell - Cleanup resources.
 memDC.SelectObject(pOldBitmap);
 memDC.DeleteDC();
 bitmap.DeleteObject();
}

举例在OnPaint中画

//建一个空的bmp图
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc,长,宽);
//把刚才建的bmp图选入内存设备中
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bmp);
//现在就可以向用dc一样画图,现在是画在内存中
   .
   .
   .
//记得画完图要copy到屏幕dc中
dc.BitBlt(...,&memDC,0,0,SRCCOPY);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值