本帖最后由 sharlon123 于 2009-10-18 10:20:12 编辑

解决方案 »

  1.   

    如果将函数改为这样,重绘正常,但是会闪烁:
    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);
    }
      

  2.   

    直接贴在DC上自然闪你在楼顶上说的我就奇怪了,Save和Restore又不会帮你擦除的。按你的流程,肯定是前面的都在,因为每次画新的位置的时候,前面的DC(有旧的方块的)都保存了,新位置,比如下落1s后,恢复了DC,那么前面的旧自然有了
      

  3.   

    你这么搞,一个DC放下面的方块,只有当有方块落地后,才更新这个DC,而不是像你那样全部弄个DC。
    然后你的空中的那个方块放一个DC明白我的意思了?
      

  4.   

    不是很明白,是不是说把下落的方块放到一个DC中,这个DC实时更新。而落地后的方块放到另一个DC中,每有方块落地就更新一次?本人刚学这个不久,请前辈指教。
      

  5.   

    问题解决了,在函数的最后我重新用背景刷了memDC。