双缓冲加载位图 WinCE

 

void CMy08301Dlg::OnPaint()

{

CPaintDC dc(this);

CDC dcMem;

CBitmap bmpMem;

dcMem.CreateCompatibleDC(&dc);

bmpMem.CreateCompatibleBitmap(&dc,800,480);

dcMem.SelectObject(&bmpMem);

 

CDC dcMem2;

dcMem2.CreateCompatibleDC(&dcMem);

 

CBitmap bmpMem2;

CString ok=L"//……//ok.bmp/0";

CString cancel=L"//……//cancel.bmp/0";

 

 

bmpMem2.m_hObject=SHLoadDIBitmap(ok);

dcMem2.SelectObject(&bmpMem2);

dcMem.BitBlt(700,350,82,36,&dcMem2,0,0,SRCCOPY);  //加载位图ok

//---------------------------------------------------------------------------------------

bmpMem2.m_hObject=SHLoadDIBitmap(cancel);

dcMem2.SelectObject(&bmpMem2);

dcMem.BitBlt(707,8,70,45,&dcMem2,0,0,SRCCOPY);     //加载位图cancel

//重复上面三句代码 加载多幅位图

//--------------------------------------------------------------------------------------

 

dc.BitBlt(0,0,800,480,&dcMem,0,0,SRCCOPY);

 

bmpMem2.DeleteObject();

dcMem2.DeleteDC();

 

bmpMem.DeleteObject();

dcMem.DeleteDC();

}

当前DC  dc;
兼容DC1  dcMem;
兼容DC2  dcMem2;
双缓冲:1: 重复利用dcMem2加载位图到dcMem,
            2:讲dcMem画面加载至当前dc。
优点:将多幅位图复制到兼容DC1:dcMem中,再复制到当前dc中,不会出现一副副图片依次出现的现象
         如果只加载一副图片就没必要双缓冲了。

备注:windows桌面系统下:

1.没有SHLoadDIBitmap

2.貌似也不能重复用dcMem2,我定义了多个兼容DC将位图加载到dcMem中。

 

转者注:

可以使用  

BITMAP bm;
//获取位图大小信息
Bitmap.GetBitmap(&bm);
然后使用bm.bmWidth和bm.bmHeight来控制位图大小

另外,如果调用了Invalidate();,则一定要重载OnEraseBkgnd(CDC* pDC),并返回return TRUE;才不会闪烁!

 

来源:

http://blog.csdn.net/ezhong0812/article/details/5862180

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值