后来才明白,原来大多数程序都使用了"双缓冲"技术. 然后我又有一个问题:为什么Windows不在内部实现双缓冲呢? 都来知道,在Vista有个WDM, 差不多就有一个双缓冲功能...
闲话少说:GDI实现双缓冲过程:
取得DC
- 创建一个位图:HBITMAP CreateCompatibleBitmap
- 创建两个个兼容内存DC:CreateCompatibleDC
- 两个DC分别绑定"要画的图"和"刚才创建的位图":SelectObject
- 把想画的样子画在"刚才创建的位图"上:BitBlt, StretchBlt等函数
- 把"刚才创建的位图"画在真正的DC上:BitBlt, StretchBlt等函数
- 释放该释放的东西,位图和内存DC:DeleteObject, DeleteDC
再来个GDI+的过程:
- 根据窗口大小建立合适的位图Gdiplus::Bitmap,并且给他创建Gdiplus::Graphics
- 取得DC,创建Gdiplus::Graphics
- 取得想画的图Gdiplus::Image
- DrawImage,把东西都画在Gdiplus::Bitmap上.
- DrawImage,把Gdiplus::Bitmap画在DC的Gdiplus::Graphics上
- 释放该释放的东西.
No comments:
Post a Comment