clwn.net
当前位置:首页 >> gDi双缓冲 >>

gDi双缓冲

双缓冲主要是为了 减少闪烁,提高平滑度doublebuffer = true

void drawimg(HWND hWnd,char *img){ HDC shedc;//设备DC HDC weidc;//位图DC HDC huandc;//缓冲DC RECT g_rect; HBITMAP g_bkbitmap,g_mbbitmap,g_hbitmapL; GetClientRect(hWnd,&g_rect); shedc = GetDC(hWnd);//设备DC

你可以用GetClipBox获得一个RECT,这个RECT是本次刷新的RECT,就可以避免整个图片在每次重绘时都再画到界面上了.

这还得看你窗口的刷新区域和刷新频率,双缓冲不能解决所有问题,还得取决于你的控制. 记住:1.尽量少刷新窗口.2.刷新窗口,保持最小区域. PS:GDI+与双缓冲没有任何关系,GDI也能做双缓冲,而且绘制效率比GDI+更高.

内存DC和内存位图最好独立创建,依据内存DC创建的内存位图是黑白的,不能用.另外,CreateCompatibleDC的参数用NULL就行了,直接与屏幕兼容,你又不用打印机:memDC = CreateCompatibleDC(NULL);sageDC = CreateCompatibleDC(NULL);bitmap = CreateCompatibleBitmap(hdc, 800, 600);余下的不用改

兄弟,见你我有缘..送你一个实例 ,http://yunpan.cn/QNXYn36aUJGC9 (访问密码:f554)记得是在panel控件内有个属性DoubleBuff设为true paint再重绘

这里有个双缓冲的例子,使用VC++ WTL写的GDI+ 时钟.将所有的绘制,都放在了一张Bitmap上.

OnPaint里头写Bitblt,OnTimer里头修改缓冲区,不要用timer发出WM_PAINT消息,直接GetClientDC然后同样地 BitBlt

用Graphics *graphics=Graphics::FromHDC(hMemDC);可以初始化

我手头没有,不过其实WINDOWS自带的那个画图板就有用到双缓冲技术,简单说就是当我们在进行画图操作时,系统并不是直接把内容呈现到屏幕上,而是先在内存中保存,然后一次性把结果输出来,如果没用双缓冲的话,你会发现在画图过程中屏幕会闪的很厉害,因为后台一直在刷新,而如果等用户画完之后再输出就不会出现这种情况,具体的做法,其实也就是先创建一个位图对象,然后把内容保存在里面,最后把图呈现出来.

网站首页 | 网站地图
All rights reserved Powered by www.clwn.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com