什么错误???
释放位图资源使用DeleteObject
如果你使用Attach初始化,使用Detach释放

解决方案 »

  1.   

    是么?可那是开始和最后时使用的啊。
    我想位图好象是一层一层的覆盖上去,会不会这样占用内存了?
    因为我用的光栅码是SRCCOPY啊。再用SetTimer(1,200,NULL)这样实现的。再Invalidate()
    麻烦各位了!
      

  2.   

    没有这回事的,这点内存Windows还是有的。
    把你的代码贴出来看看。
      

  3.   

    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;
    }
    }
    请指导,不胜感激
      

  4.   

    每次StretchBlt后,记住加上一句:dc.SelectObject(pOldBitmap);
    只要申请了设备,在使用完以后就应该释放它。
      

  5.   

    兄弟你也够厉害了用这么多的图像句柄,你想想一下子打开这么多的图需要多少内存啊
    dcImage.DeleteDC()
      

  6.   

    哦,dcImage不会自动析构么?
    各位,小弟无能,实在羞愧诸位。
    小弟照做了一番,运行后依然如故,
    出现“某某”引用“某某”内存,该内存不能为read。
    调试后指在
    _AFXWIN_INLINE HGDIOBJ CGdiObject::GetSafeHandle() const
    { return this == NULL ? NULL : m_hObject; }
    再次麻烦各位了,小弟这厢有礼了。