void CGameView::OnDraw(CDC* pDC)
{
// CGameDoc* pDoc = GetDocument();
//ASSERT_VALID(pDoc);
if(pCurrShape!=NULL)
{  
 
  CDC memdc;
  CBitmap map;
  memdc.CreateCompatibleDC(pDC);
  map.CreateCompatibleBitmap(pDC,(BACK_COL)*20,(BACK_ROW)*20);
  CBitmap *pOld=memdc.SelectObject(&map);
  memdc.FillSolidRect(0,0,(BACK_COL)*20,(BACK_ROW)*20,BackColor);   pCurrShape->GetNewRec();      for(int i=0;i<BACK_ROW;i++)
for(int j=0;j<BACK_COL;j++)
{
if(pCurrShape->aBack[i][j].Filled && pCurrShape->aBack[i][j].status)
{
ASSERT(pCurrShape->aBack[i][j].OldRec!=NULL);
memdc.FillSolidRect(pCurrShape->aBack[i][j].OldRec,BackColor);
}
}
  for(int i=0;i<BACK_ROW;i++)
for(int j=0;j<BACK_COL;j++)
{
if(pCurrShape->aBack[i][j].Filled )
{
ASSERT(pCurrShape->aBack[i][j].NewRec!=NULL);    
memdc.FillSolidRect(pCurrShape->aBack[i][j].NewRec,pCurrShape->aBack[i][j].m_color);
    memdc.Draw3dRect(pCurrShape->aBack[i][j].NewRec,RGB(255,255,255),RGB(250,0,255));
}
}

/*
for(int i=0;i<=BACK_ROW;i++)
{
memdc.MoveTo(0,i*20);
memdc.LineTo(BACK_COL*20,i*20);
}
for(int j=0;j<=BACK_COL;j++)
{
memdc.MoveTo(j*20,0);
memdc.LineTo(j*20,BACK_ROW*20);
}
*/

pDC->BitBlt(0,0,BACK_COL*20,BACK_ROW*20,&memdc,0,0,SRCCOPY); memdc.DeleteDC();
ReleaseDC(&memdc);
  
}

}
这段代码在运行一段时间后在::ExtTextOut(m_hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL); 停止,不知道错误原因,谁能告诉我?非常感激!!
void CDC::FillSolidRect(LPCRECT lpRect, COLORREF clr)
{
ASSERT_VALID(this);
ASSERT(m_hDC != NULL); ::SetBkColor(m_hDC, clr);
::ExtTextOut(m_hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);
}

解决方案 »

  1.   

    gz+up
    搞不懂,看了没什么问题啊
      

  2.   

    试试把它放到一个单独的线程中,并个一段时间释放一次线程,有时程序太忙,就会停止,我有个循环虽然不是死的,但任务量很大,以运行就停止,我加了Sleep(1)就好了
      

  3.   

    错误是:程序中的 0x77f4556f 处未处理的异常:0xC0000005: 读取位置 0x0000e701 时发生访问冲突 。
    是不是我的指针有问题,这里面指针太多了,而且出现错误的地方也不知到什么时候出现,请问怎么调试
      

  4.   

    去掉 ReleaseDC(&memdc);试一试