MFC双缓冲贴图问题 本帖最后由 sharlon123 于 2009-10-18 10:20:12 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果将函数改为这样,重绘正常,但是会闪烁:void CRussia::DrawJiemian(CDC *pDC)//画界面{ int nOldDC=pDC->SaveDC(); //背景 CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject(cBkgound); pDC->BitBlt(0,0,800,600,&memDC,0,0,SRCCOPY); //画分数、级别、速度 //直接贴在pDC上 DrawScore(pDC); CDC memDC1; memDC1.CreateCompatibleDC(pDC); memDC1.SelectObject(cBlock); //画方块 //直接贴在pDC上 for(int i=0;i<m_RowCount;i++) for(int j=0;j<m_ColCount;j++) if(Russia[i][j]==1) pDC->BitBlt(j*20+300,i*20+100,20,20,&memDC1,0,0,SRCCOPY); //预览方块 //直接贴在pDC上 for(int n=0;n<4;n++) for(int m=0;m<4;m++) if(Will[n][m]==1) pDC->BitBlt(542+m*20,115+n*20,20,20,&memDC1,0,0,SRCCOPY); pDC->RestoreDC(nOldDC);} 直接贴在DC上自然闪你在楼顶上说的我就奇怪了,Save和Restore又不会帮你擦除的。按你的流程,肯定是前面的都在,因为每次画新的位置的时候,前面的DC(有旧的方块的)都保存了,新位置,比如下落1s后,恢复了DC,那么前面的旧自然有了 你这么搞,一个DC放下面的方块,只有当有方块落地后,才更新这个DC,而不是像你那样全部弄个DC。然后你的空中的那个方块放一个DC明白我的意思了? 不是很明白,是不是说把下落的方块放到一个DC中,这个DC实时更新。而落地后的方块放到另一个DC中,每有方块落地就更新一次?本人刚学这个不久,请前辈指教。 问题解决了,在函数的最后我重新用背景刷了memDC。 VC+Win7下添加组件的问题 能不能在CHtmlView中搞拦截 我的线程为什么不停止了? 创建线程后卫什么关闭了线程句柄,线程还是可以运行! 怎么确定一个MFC ActiveX Control里是否提供了可以被脚本语言调用的Get/Set方法? 有没有学习ATL的书可以推荐? 关于icopyhook的问题 Win下,两个应用程序间需要频繁传递信息,用什么办法? CListCtrl的小问题 熟悉游戏开发的朋友请过来,答对就有分 奇怪,GetModuleFileName得到所有进程的路径都是相同的??? 一幅混合图像中特定颜色块边缘的提取
void CRussia::DrawJiemian(CDC *pDC)//画界面
{
int nOldDC=pDC->SaveDC(); //背景
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(cBkgound);
pDC->BitBlt(0,0,800,600,&memDC,0,0,SRCCOPY); //画分数、级别、速度
//直接贴在pDC上
DrawScore(pDC); CDC memDC1;
memDC1.CreateCompatibleDC(pDC);
memDC1.SelectObject(cBlock);
//画方块
//直接贴在pDC上
for(int i=0;i<m_RowCount;i++)
for(int j=0;j<m_ColCount;j++)
if(Russia[i][j]==1)
pDC->BitBlt(j*20+300,i*20+100,20,20,&memDC1,0,0,SRCCOPY); //预览方块
//直接贴在pDC上
for(int n=0;n<4;n++)
for(int m=0;m<4;m++)
if(Will[n][m]==1)
pDC->BitBlt(542+m*20,115+n*20,20,20,&memDC1,0,0,SRCCOPY); pDC->RestoreDC(nOldDC);
}
然后你的空中的那个方块放一个DC明白我的意思了?