Help!!!!!用位图实现动画所引起的问题 什么错误???释放位图资源使用DeleteObject如果你使用Attach初始化,使用Detach释放 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是么?可那是开始和最后时使用的啊。我想位图好象是一层一层的覆盖上去,会不会这样占用内存了?因为我用的光栅码是SRCCOPY啊。再用SetTimer(1,200,NULL)这样实现的。再Invalidate()麻烦各位了! 没有这回事的,这点内存Windows还是有的。把你的代码贴出来看看。 ok。我是用splash实现的。共用了13副图片。具体略。BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/){ HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T("Balloons.bmp"),IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); if(hBitmap==NULL) { MessageBox("ok"); return FALSE; }//一直从hbitmap1到hbitmap12,略,下同 他们已在构造函数中声明。 m_bitmap.Attach(hBitmap); BITMAP bm; m_bitmap.GetBitmap(&bm); 。。 return CreateEx(0,AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), NULL, WS_POPUP | WS_VISIBLE, 0, 0, 800, 580, pParentWnd->GetSafeHwnd(), NULL);// return CreateEx(0,// AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),// NULL, WS_POPUP | WS_VISIBLE, 0, 0,CW_USEDEFAULT,CW_USEDEFAULT,pParentWnd->GetSafeHwnd(), NULL);}void CSplashWnd::HideSplashScreen(){ // Destroy the window, and update the mainframe. DestroyWindow(); AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW); AfxGetMainWnd()->UpdateWindow(); DeleteObject(m_bitmap.Detach()); 。 DeleteObject(m_bitmap12.Detach());}int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; SetTimer(1, 10000, NULL); SetTimer(2,250,NULL); return 0;}void CSplashWnd::OnPaint(){ CPaintDC dc(this); CDC dcImage; if (!dcImage.CreateCompatibleDC(&dc)) return ; CRect r; GetClientRect(&r); BITMAP bm; m_bitmap.GetBitmap(&bm); m_bitmap12.GetBitmap(&bm); CBitmap * pOldBitmap; // Paint the image. switch(i) { case 0: pOldBitmap= dcImage.SelectObject(&m_bitmap); 。 case 12: pOldBitmap= dcImage.SelectObject(&m_bitmap12); break; default: break; } int k=i%13; int j=0; int m=1; int n=1; j=k%4; m=j%2; n=j/2; dc.StretchBlt(m*r.Width()/2+10*i, n*r.Height()/2+10*i, (m+1)*r.Width()/2, (n+1)*r.Height()/2,&dcImage, 0, 0,bm.bmWidth,bm.bmHeight, SRCCOPY);}void CSplashWnd::OnTimer(UINT nIDEvent){ // Destroy the splash screen window. switch(nIDEvent) { case 1: HideSplashScreen(); break; case 2: i=rand()%13;; Invalidate(); break; }}请指导,不胜感激 每次StretchBlt后,记住加上一句:dc.SelectObject(pOldBitmap);只要申请了设备,在使用完以后就应该释放它。 兄弟你也够厉害了用这么多的图像句柄,你想想一下子打开这么多的图需要多少内存啊dcImage.DeleteDC() 哦,dcImage不会自动析构么?各位,小弟无能,实在羞愧诸位。小弟照做了一番,运行后依然如故,出现“某某”引用“某某”内存,该内存不能为read。调试后指在_AFXWIN_INLINE HGDIOBJ CGdiObject::GetSafeHandle() const { return this == NULL ? NULL : m_hObject; }再次麻烦各位了,小弟这厢有礼了。 splitter分屏后如何禁止改变编各子窗口大小 关于对话框的一个问题 熟悉CxImage的朋友请进来!!! gcc中(linux下),用什么来实现MFC中CList类似的链表功能? 新手问STL中list相关问题~~ 如果作一个智能型的菜单 有熟悉BCG组件的兄弟? 怎么做才能把WinSocket缓冲区的数据接收到另外的数组中去? 又一Dll问题 谁有mp3文件格式 Help me! 关于扫雷小游戏 关于自动启动程序的问题
我想位图好象是一层一层的覆盖上去,会不会这样占用内存了?
因为我用的光栅码是SRCCOPY啊。再用SetTimer(1,200,NULL)这样实现的。再Invalidate()
麻烦各位了!
把你的代码贴出来看看。
BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/)
{
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,_T("Balloons.bmp"),IMAGE_BITMAP,0,0,
LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
if(hBitmap==NULL)
{
MessageBox("ok");
return FALSE;
}
//一直从hbitmap1到hbitmap12,略,下同 他们已在构造函数中声明
。
m_bitmap.Attach(hBitmap);
BITMAP bm;
m_bitmap.GetBitmap(&bm);
。。
return CreateEx(0,AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
NULL, WS_POPUP | WS_VISIBLE, 0, 0, 800, 580, pParentWnd->GetSafeHwnd(), NULL);
// return CreateEx(0,
// AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
// NULL, WS_POPUP | WS_VISIBLE, 0, 0,CW_USEDEFAULT,CW_USEDEFAULT,pParentWnd->GetSafeHwnd(), NULL);}void CSplashWnd::HideSplashScreen()
{
// Destroy the window, and update the mainframe.
DestroyWindow();
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
AfxGetMainWnd()->UpdateWindow();
DeleteObject(m_bitmap.Detach());
。
DeleteObject(m_bitmap12.Detach());
}int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer(1, 10000, NULL);
SetTimer(2,250,NULL); return 0;
}void CSplashWnd::OnPaint()
{
CPaintDC dc(this); CDC dcImage;
if (!dcImage.CreateCompatibleDC(&dc))
return ;
CRect r;
GetClientRect(&r); BITMAP bm;
m_bitmap.GetBitmap(&bm);
m_bitmap12.GetBitmap(&bm);
CBitmap * pOldBitmap;
// Paint the image.
switch(i)
{
case 0:
pOldBitmap= dcImage.SelectObject(&m_bitmap);
。
case 12:
pOldBitmap= dcImage.SelectObject(&m_bitmap12);
break;
default:
break;
}
int k=i%13;
int j=0;
int m=1;
int n=1;
j=k%4;
m=j%2;
n=j/2;
dc.StretchBlt(m*r.Width()/2+10*i, n*r.Height()/2+10*i, (m+1)*r.Width()/2,
(n+1)*r.Height()/2,&dcImage, 0, 0,bm.bmWidth,bm.bmHeight, SRCCOPY);
}void CSplashWnd::OnTimer(UINT nIDEvent)
{
// Destroy the splash screen window.
switch(nIDEvent)
{
case 1:
HideSplashScreen();
break;
case 2:
i=rand()%13;;
Invalidate();
break;
}
}
请指导,不胜感激
只要申请了设备,在使用完以后就应该释放它。
dcImage.DeleteDC()
各位,小弟无能,实在羞愧诸位。
小弟照做了一番,运行后依然如故,
出现“某某”引用“某某”内存,该内存不能为read。
调试后指在
_AFXWIN_INLINE HGDIOBJ CGdiObject::GetSafeHandle() const
{ return this == NULL ? NULL : m_hObject; }
再次麻烦各位了,小弟这厢有礼了。