图片定时更替
图片定时更换
void CShowMapDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CBitmap bitmap,bitmap1;
CDC memeDC;
CDC *pDC=GetDC();
CRect rect;
switch (nIDEvent)
{
case 0:
bitmap.LoadBitmap(IDB_BITMAP1);
memeDC.CreateCompatibleDC(pDC);
memeDC.SelectObject(&bitmap);
pDC->BitBlt(0,0,300,300,&memeDC,0,0,SRCCOPY);
break;
case 1:
Invalidate();
UpdateWindow();
break;
case 2:
bitmap1.LoadBitmap(IDB_BITMAP2);
memeDC.CreateCompatibleDC(pDC);
memeDC.SelectObject(&bitmap1);
pDC->BitBlt(0,0,600,600,&memeDC,0,0,SRCCOPY);
break;
}
ReleaseDC(pDC);
memeDC.DeleteDC(); //释放DC,即内存。
CDialog::OnTimer(nIDEvent);
问题就是第一张图片显示的时候没法更换第二张图片,程序执行完第一张图片始终在前面没法换下来怎么换?就是定时执行到case 2:要把图片换下来,请问还差什么还没写?谢谢
------解决方案--------------------
1. SetTimer 有几个?
要是轮流的 画: static int count=0;
可以 改变 switch (count)
case 0:
count ++;
case 1:
count ++;
....
------解决方案--------------------
lz这样写代码也太那个了。
给你个建议
定时器事件:
轮流加载图片,
或者获取预先加载,定时器负责切换图片如: pBmp=BmpA/pBmp=BmpB 一句代码
OnPaint事件:
负责将图片显示到窗口 pBmp-->pDC
------解决方案--------------------
一、有OnPaint却非要在其他地方用GetDC
这是有神经病的征兆
二、有变化的地方加几个类的成员变量死不了人的
比如,int w,h;表示图片宽和高,DWORD pID;表示图片ID
于是:
void CShowMapDlg::OnTimer(UINT nIDEvent)
{
switch (nIDEvent)
{
case 0:
w=300;h=300;pID=IDB_BITMAP1;Invalidate();break;
case 1:
w=600;h=600;pID=IDB_BITMAP2;Invalidate();break;
}
CDialog::OnTimer(nIDEvent);
}
void CShowMapDlg::OnPaint()
{
CPaintDC dc(this);
CDC memDC;
CBitmap bitmap;
bitmap.LoadBitmap(pID);
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bitmap);
dc.BitBlt(0,0,w,h,&memDC,0,0,SRCCOPY);
memDC.DeleteDC(); //释放DC,即内存。
bitmap.DeleteObject();
}
void CShowMapDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CBitmap bitmap,bitmap1;
CDC memeDC;
CDC *pDC=GetDC();
CRect rect;
switch (nIDEvent)
{
case 0:
bitmap.LoadBitmap(IDB_BITMAP1);
memeDC.CreateCompatibleDC(pDC);
memeDC.SelectObject(&bitmap);
pDC->BitBlt(0,0,300,300,&memeDC,0,0,SRCCOPY);
break;
case 1:
Invalidate();
UpdateWindow();
break;
case 2:
bitmap1.LoadBitmap(IDB_BITMAP2);
memeDC.CreateCompatibleDC(pDC);
memeDC.SelectObject(&bitmap1);
pDC->BitBlt(0,0,600,600,&memeDC,0,0,SRCCOPY);
break;
}
ReleaseDC(pDC);
memeDC.DeleteDC(); //释放DC,即内存。
CDialog::OnTimer(nIDEvent);
问题就是第一张图片显示的时候没法更换第二张图片,程序执行完第一张图片始终在前面没法换下来怎么换?就是定时执行到case 2:要把图片换下来,请问还差什么还没写?谢谢
------解决方案--------------------
1. SetTimer 有几个?
要是轮流的 画: static int count=0;
可以 改变 switch (count)
case 0:
count ++;
case 1:
count ++;
....
------解决方案--------------------
lz这样写代码也太那个了。
给你个建议
定时器事件:
轮流加载图片,
或者获取预先加载,定时器负责切换图片如: pBmp=BmpA/pBmp=BmpB 一句代码
OnPaint事件:
负责将图片显示到窗口 pBmp-->pDC
------解决方案--------------------
一、有OnPaint却非要在其他地方用GetDC
这是有神经病的征兆
二、有变化的地方加几个类的成员变量死不了人的
比如,int w,h;表示图片宽和高,DWORD pID;表示图片ID
于是:
void CShowMapDlg::OnTimer(UINT nIDEvent)
{
switch (nIDEvent)
{
case 0:
w=300;h=300;pID=IDB_BITMAP1;Invalidate();break;
case 1:
w=600;h=600;pID=IDB_BITMAP2;Invalidate();break;
}
CDialog::OnTimer(nIDEvent);
}
void CShowMapDlg::OnPaint()
{
CPaintDC dc(this);
CDC memDC;
CBitmap bitmap;
bitmap.LoadBitmap(pID);
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bitmap);
dc.BitBlt(0,0,w,h,&memDC,0,0,SRCCOPY);
memDC.DeleteDC(); //释放DC,即内存。
bitmap.DeleteObject();
}