2023年7月18日发(作者:)
MFC绘图,双缓冲 作为⼀名初学者,在此发⾔深感惭愧, 望诸位前辈见谅.
结合个⼈处⼥座"打砖块", 进⾏总结,此⼩游戏供涉及的⼀个⽐较重要的知识点.
1, 采⽤双缓冲技术绘图 , 以往绘图,我们会选在OnDraw() 函数⾥⾯. 但是当图形与背景⾊差异⽐较⼤时,由于屏幕不断刷新会导致客户区的图形不断的闪烁.
那么我们不怕,因为我们可以采⽤双缓冲技术, 双缓冲技术的实质就是采⽤两块画布,前⾯⼀块给⽤户看,后⾯⼀块⽤来画,当后⾯⼀块画好了后,便放到前⾯去,由于这是区域的复制,速度相当快,⼈眼是感觉不出来的,就形成了良好的效果.
我给⼤家举个例⼦:
void CXXXXXView::OnTimer(UINT nIDEvent)
//以下采⽤双缓冲技术,使⼩球运动的同时不闪烁,如果在ondraw⾥进⾏渲染会不停的闪烁CDC* pDC=GetDC(); //得到当前客户区的绘图设备描述表CDC mdc; //声明绘图缓存CompatibleDC(pDC); //在绘图缓存中创建与当前设备描述表兼容的设备描述表CRect rcClient;GetClientRect(rcClient); //得到客户区⼤⼩,⼩球在这⾥⾯运动.固定CBitmap bmp; //声明位图对象CompatibleBitmap(pDC,(),()); //根据客户区⼤⼩创建位图CBitmap* pOldObj = Object(&bmp);//把位图选到兼容DC中,这样才可以开始画e(,,,); //绘制⼩球gle(banz,bans,banz+80,banx); //下⾯移动的板⼦,第三个参数是为了⿏标控制的时候板⼦资⾃⾝⼤⼩不改变pDC->BitBlt(0,0,(),(),&mdc,0,0, NOTSRCCOPY); //将绘图缓存中画好的的图画⼀次性拷贝到当前设
备描述表中,这样能防⽌闪烁 Object(pOldObj); DC(); //最后释放DC.
代码中有很详细的注释.由于我也是新⼿,因此说的唠叨了⼀些. 供和我⼀样的新⼿共同进步.
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689610569a270383.html
评论列表(0条)