让人物在地图上动起来

其实很简单,在原来添加地图的基础上,添加一个定时器,每间隔一定时间加载一个行动的图片

HBITMAP bit; 
HDC  MemDC; 
int  w,h;
CString dir;
CString cc;

int  p;
char appdir[256];

int m0; //用于初始化人物为0
int m1;//图片数量的最大值

BOOL getpic(CString cc,int p);
BOOL loadbmp(CString cc);

加载不同图片

BOOL getpic(CString cc,int p)
{
 cc.Format("%s\\图片\\人\\c%05d.bmp",dir,p);
 loadbmp(cc);
 return TRUE;
}

添加定时器

void ClearnDlg::OnTimer(UINT nIDEvent)
{
 //添加一个定时器其实用处很简单 不定的加载不同的图片在同一个地方
 CClientDC dc(this);
 if(getpic("人",p)==FALSE)
  AfxMessageBox(cc+"没找到!");
 SelectObject(MemDC,bit);
 BitBlt(dc.m_hDC,200,160,w,h,MemDC,0,0,SRCCOPY);
 p++;
 if(p>m1) p=m0;
 CDialog::OnTimer(nIDEvent);
}

void ClearnDlg::OnBnClickedOk()
{
 CClientDC dc(this);
 p=400;
 m0=400;
 m1=799;

 MemDC = CreateCompatibleDC(0);//暂存设备场景

 GetCurrentDirectory(256,appdir);
 dir=appdir;

 //加载地图
    cc=dir+"\\图片\\地面.bmp";
 if(loadbmp(cc)==FALSE)
   AfxMessageBox(cc+"没找到!");
 SelectObject(MemDC,bit);
 SetBkMode(MemDC,TRANSPARENT);
 BitBlt(dc.m_hDC,0,0,400,300,MemDC,0,0,SRCCOPY);

 SetTimer(1,150,NULL);
}

void ClearnDlg::OnBnClickedCancel()
{
 // TODO: 在此添加控件通知处理程序代码
 DeleteDC(MemDC);
 DeleteObject(bit);
 OnCancel();
}

问题来了,原来加载的图片是否在内存中消失????????????????????????????

posted @ 2013-07-31 14:48  露水上的青蛙  阅读(343)  评论(0编辑  收藏  举报