关于DC的使用不是很明白,到底创建的DC需不需要释放?这段代码是将左上角复制到程序的view里面显示,短暂运行程序没有问题。如果长时间运行,内存会不会有问题? HDC hDC = ::GetDC(NULL);
CDC *dc = CDC::FromHandle(hDC); pDC->BitBlt(0,0,260,60,dc,0,0,SRCCOPY); dc->Detach();
DeleteObject(hDC);可以写成这样吗?省略掉后面的释放。 pDC->BitBlt(0,0,260,60,CDC::FromHandle(::GetDC(NULL)),0,0,SRCCOPY);上面简化的写法正确吗?

解决方案 »

  1.   

    要释放  如果不的话 你的GDI对象数目会不停的增加 到了10000就崩掉了
      

  2.   

    GetDC,用完了,就要ReleaseDC
    否则会有GDI句柄泄漏,最后程序就崩溃了
      

  3.   

    讲讲原理吧! ::GetDC(NULL);这个会不断占据内存吗?
      

  4.   

    ::GetDC(NULL);实例化一个CDC类对象,为该对象有关的系统资源分配内存空间;
    每次执行的时候,都会分配不同的内存空间
    久而久之,……
      

  5.   

    嗯同志们,改成下述做法是否可行? HDC hDC = ::GetDC(NULL); pDC->BitBlt(0,0,260,60, CDC::FromHandle(hDC) ,0,0,SRCCOPY); DeleteObject(hDC);原来的 dc->Detach(); 有必要吗?
      

  6.   

    呵呵,想加点颜色,结果不行,代码如下:    HDC hDC = ::GetDC(NULL);    pDC->BitBlt(0,0,260,60,  CDC::FromHandle(hDC)  ,0,0,SRCCOPY);    DeleteObject(hDC);
      

  7.   

    这个并不是占据内存的问题,DC也是GDI资源之一,系统的GDI资源是有限的,我的代码申请了GDI资源如果不释放,当GDI资源用尽了之后程序就会出现问题。
      

  8.   

    同志们,改成下述做法是否可行?C/C++ code    HDC hDC = ::GetDC(NULL);    pDC->BitBlt(0,0,260,60, CDC::FromHandle(hDC) ,0,0,SRCCOPY);    DeleteObject(hDC);
    ==============
    这样肯定不行啊,hDC和pDC类指针没有关联啊,CDC *dc = CDC::FromHandle(hDC);是将GetDC得到的HDC对象关联到pDC上去的,这个不能少的。
      

  9.   

    你好像没有理解FromHandle的作用啊。
      

  10.   

    凡是申请的DC都应该释放,这个并不是占用内存的问题,资源除了内存还有别的资源,你上面的代码波及到的是GDI资源,不是内存释放的问题。
    至于代码,你自己第一次写的就是正确的,你还要什么代码啊?