您的位置:首页 > 其它

双缓冲加载位图 WinCE

2011-08-10 04:59 169 查看
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;才不会闪烁!

来源:

/article/9381516.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: