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);
}
{
// 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);
}
搞不懂,看了没什么问题啊
是不是我的指针有问题,这里面指针太多了,而且出现错误的地方也不知到什么时候出现,请问怎么调试