一个关于MFC显示的问题
我是个MFC初学者,想做个迷宫窗口,结果做玩一些基本的函数的时候编译出现pDC没有定义的问题。虽然知道是哪里错了但是不知道怎么改,请大家帮我看下怎么改才能实现我这个动态迷...
我是个MFC初学者,想做个迷宫窗口,结果做玩一些基本的函数的时候编译出现pDC没有定义的问题。虽然知道是哪里错了但是不知道怎么改,请大家帮我看下怎么改才能实现我这个动态迷宫的功能,尽量讲的简单些。。我的代码如下 打不了这么多字,只有省略一些重复的代码,我创建的是单文档文件,所以就把一些自动加进去的代码删了
/////////////////////////////////////////////////////////////////////////////
// CMgView construction/destruction
CMgView::CMgView()
{
//m_btp...是我定义的CBitmap型的私有变量
array=CreatMaze();
m_btpdoor.LoadBitmap(IDB_BITMAP4);
m_btp.LoadBitmap(IDB_BITMAP1);
m_btpway.LoadBitmap(IDB_BITMAP2);
m_btpfm.LoadBitmap(IDB_BITMAP3);
// TODO: add construction code here
}
void CMgView::OnDraw(CDC* pDC)
{
DrawMap(pDC,array);
CMgDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CMgView::DrawMap(CDC *pDC,int **array)
{
CDC dc,dc1,dc2,dc3;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_btp);
dc1.CreateCompatibleDC(pDC);
dc1.SelectObject(&m_btpway);
dc2.CreateCompatibleDC(pDC);
dc2.SelectObject(&m_btpfm);
dc3.CreateCompatibleDC(pDC);
dc3.SelectObject(&m_btpdoor);
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(WALL==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc,0,0,SRCCOPY);
else if(WAY==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc1,0,0,SRCCOPY);
else if(FRAME==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc2,0,0,SRCCOPY);
else if(ENCHANCE==array[i][j]||ET==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc3,0,0,SRCCOPY);
}
}
}
int CMgView::mazepath(int **array) //迷宫过程函数
{
int move[8][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
temp1 s;
creat(s);
point **pt=new point*[row];//在堆里动态定义二维数组,则这个局部变量在函数运行完之后就不会自行释放
for( int i=0;i<row;i++)
pt[i]=new point[col];
//point pt[10][10];
int x,y;
bool tag=FALSE;
for( i=0;i<10;i++) //初始化迷宫
{
for(int j=0;j<10;j++)
{
pt[i][j].status=array[i][j];
pt[i][j].x=i;
pt[i][j].y=j;
pt[i][j].tf=FALSE;
}
}
for( i=0;i<10;i++) //寻找迷宫入口
{
for(int j=0;j<10;j++)
{
if(array[i][j]==ENCHANCE)
{
x=i;
y=j;
tag=TRUE;
break;
}
}
if(tag==TRUE) break;
}
push(s,pt[x][y]);
point pt1,pt2;
while(!empty(s))
{
top(s,pt1);
for(i=0;i<8;i++) //往8个方向探索
{
x=pt1.x+move[i][1];
y=pt1.y+move[i][0];
if(pt[x][y].status==WAY&&pt[x][y].tf!=TRUE)
{
push(s,pt[x][y]);
pt[x][y].tf=TRUE;
pt[x][y].status=WAYED;
pt_to_array(pt,array);
DrawMap(pDC,array); //这里开始就提示没有定义pDC了,我的想法是获取到OnDraw函数的形参里那个DC,可是不知道怎么做,之后的步骤都差不多,就不写了,字数不够
break;
} 展开
/////////////////////////////////////////////////////////////////////////////
// CMgView construction/destruction
CMgView::CMgView()
{
//m_btp...是我定义的CBitmap型的私有变量
array=CreatMaze();
m_btpdoor.LoadBitmap(IDB_BITMAP4);
m_btp.LoadBitmap(IDB_BITMAP1);
m_btpway.LoadBitmap(IDB_BITMAP2);
m_btpfm.LoadBitmap(IDB_BITMAP3);
// TODO: add construction code here
}
void CMgView::OnDraw(CDC* pDC)
{
DrawMap(pDC,array);
CMgDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CMgView::DrawMap(CDC *pDC,int **array)
{
CDC dc,dc1,dc2,dc3;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_btp);
dc1.CreateCompatibleDC(pDC);
dc1.SelectObject(&m_btpway);
dc2.CreateCompatibleDC(pDC);
dc2.SelectObject(&m_btpfm);
dc3.CreateCompatibleDC(pDC);
dc3.SelectObject(&m_btpdoor);
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(WALL==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc,0,0,SRCCOPY);
else if(WAY==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc1,0,0,SRCCOPY);
else if(FRAME==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc2,0,0,SRCCOPY);
else if(ENCHANCE==array[i][j]||ET==array[i][j]) pDC->BitBlt(50+j*30,50+i*30,30,30,&dc3,0,0,SRCCOPY);
}
}
}
int CMgView::mazepath(int **array) //迷宫过程函数
{
int move[8][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
temp1 s;
creat(s);
point **pt=new point*[row];//在堆里动态定义二维数组,则这个局部变量在函数运行完之后就不会自行释放
for( int i=0;i<row;i++)
pt[i]=new point[col];
//point pt[10][10];
int x,y;
bool tag=FALSE;
for( i=0;i<10;i++) //初始化迷宫
{
for(int j=0;j<10;j++)
{
pt[i][j].status=array[i][j];
pt[i][j].x=i;
pt[i][j].y=j;
pt[i][j].tf=FALSE;
}
}
for( i=0;i<10;i++) //寻找迷宫入口
{
for(int j=0;j<10;j++)
{
if(array[i][j]==ENCHANCE)
{
x=i;
y=j;
tag=TRUE;
break;
}
}
if(tag==TRUE) break;
}
push(s,pt[x][y]);
point pt1,pt2;
while(!empty(s))
{
top(s,pt1);
for(i=0;i<8;i++) //往8个方向探索
{
x=pt1.x+move[i][1];
y=pt1.y+move[i][0];
if(pt[x][y].status==WAY&&pt[x][y].tf!=TRUE)
{
push(s,pt[x][y]);
pt[x][y].tf=TRUE;
pt[x][y].status=WAYED;
pt_to_array(pt,array);
DrawMap(pDC,array); //这里开始就提示没有定义pDC了,我的想法是获取到OnDraw函数的形参里那个DC,可是不知道怎么做,之后的步骤都差不多,就不写了,字数不够
break;
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询