屏幕的双向缓冲

1、在窗口回调函数windowproc的WM_PAINT部分通过BeginPaint得到的HDC,就是前端缓冲的HDC。 2、为防止闪烁,在内在中另外创建一个区域,为后备缓冲区。称为双缓冲技术或页面切换技术。 3、实现步骤 1)首先创建一个与显示DC相兼容的内存设备描述表。 A)创建内存设备描述表 HDChdcBackBuffer=CreateCompatibleDC(NULL);//NULL表示创建一个与当前屏幕兼容的DC B)DC创建完默认为一个单色、宽度和高度各为一个像素。所以需要创建位图,用SelectObject函数将其选入该DC,对DC进行扩充。使用下列函数原型: HBITMAP CreateCompatibleBitmap( HDChdc, intnWidth, intnHeight ); 具体如下: HDC hdc=GetDC(hwnd); HBITMAP CreateCompatibleBitmap(hdc,cxClient,cyclient); HBITMAPholdBitmap=(HBITMAP)SelectObject(hdcBackBuffer,hBitmap);//已经存在1*1像素的位图被备份 2)使用后备缓冲器 A)清除后备缓冲-通常采用办法就是用背景色填充。可使用BitBlt函数把这一内存块填充为某个色。 B)在后备缓冲区的hdc中绘图、写字等。 C)将后备缓冲中的内容复制到前台缓冲区。 case wm_paint: { PAINTSTRUCT ps; BeginPaint(hwnd,&ps); //清理后备缓冲区,用白色填充 BitBlt(hdcBackBuffer,0,0, cxclient,cyclient,NULL,NULL,NULL, WHITENESS); //使用BitBlt函数把后备缓冲中的内容传送到前置缓冲区内以供显示 BitBlt(ps.hdc, 0, 0, cxclient, cyclient, hdcBackBuffer, 0, 0, SRCCOPY); EndPaint(hwnd,&ps); } 3)确实不需要用后备缓冲区后,应手动删除它 SelectObject(hdcBackBuffer,hOldBitmap) ; DeleteDC(hdcBackBuffer); DeleteObject(hBitmap);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值