我做一个键盘控件,用两张图片不停的替换,请帮帮忙,可以替换,可浪费资源太多太多!请看下边那个页面!
http://www.csdn.net/expert/topic/1009/1009461.xml

解决方案 »

  1.   

    申请两块内存吧,一块存放新的bmp,一块存放被覆盖的,更新就快多了
      

  2.   

    我用VC不是特多,以前用DELPHI,请给点具体提示,而我实现的不停浪费资源是怎么回事?
      

  3.   

    首先第一点你的DC没有释放。还有另一种方法你可以试试看
    将BMP1(可能是你的主窗口背景图)贴在你的主窗口中,BMP2贴在一个非模态对话框上,并且将该非模态对话框设置成最上层的窗口,这样你的那些BitBlt都可以转换为MoveWindow这个非模态对话框
      

  4.   

    dcMemory1,dcMemory2,CreateCompatibleDC创建内存兼容设备但最终没有删除
    用DeleteDC(dcMemory1);DeleteDC(dcMemory2);
      

  5.   

    对了。new过的东西要释放。
      

  6.   

    我试了,还是猛浪费资源:
    CBitmap *bitmap1;
    bitmap1=new CBitmap();
    bitmap1->LoadBitmap(id1);
    dc=CWnd::GetDC();
    dcMemory2.CreateCompatibleDC(dc);
    oldBitmap2=dcMemory2.SelectObject(bitmap1);
    dc->BitBlt   (left1,top1,right1,bottom1,&dcMemory2,left1,top1,SRCCOPY);
    dcMemory2.SelectObject(oldBitmap2);
    dcMemory2.DeleteDC();
    bitmap1->Detach();
    bitmap1->DeleteObject();
    bitmap1->Detach();
    bitmap1->DeleteObject();
    delete bitmap1;
    bitmap1=NULL;
    ReleaseDC(dc);
    怎么办?
      

  7.   

    你又是detach又是deleteobject烦不烦呀,用完了就直接delete bitmap1;
    mfc的这几个类不熟,你直接用句柄会更好操作更清晰。
      

  8.   

    你的代码中倒数第 4 行
    mybitmap2->Detach();
    这是不能有的。//问题在此。倒数第3行
    mybitmap2->DeleteObject();
    也是可以不要的。还有 oldBitmap1, oldBitmap2 也是多余的,可以删了。包括dcMemory1.SelectObject(oldBitmap1);等还有如果dcMemory1,dcMemory2是全局的变量你得 DeleteDC,如果是局部变量就无所谓了,还有如果这是个函数得话,你干吗每次都Loadbitmp 2。何不在外面load 1 次保存着。
      

  9.   

    帮你看了一下,问题出在这:
    bitmap1->Detach();
    bitmap1->DeleteObject();
    你都已经Detach了,delete bitmap1的时候当然就删不掉位图了。解决方法:
    DeleteObject(bitmap1->Detach());或把bitmap1->Detach();删掉
      

  10.   

    请大家去http://www.csdn.net/expert/topic/1009/1009461.xml,我散那二百分!