使用CreateRectRgn,是否应该DeleteObject该区域例子1
  Rgn1 = CreateRectRgn
  Rgn2 = CreateRectRgn
  CombineRgn(Rgn3, Rgn1, Rgn2, RGN_AND);  此处是否要释放,该释放些什么?例子2
  Rgn1 = CreateRectRgn
  GetClipRgn(ADC, Rgn2);
  SelectClipRgn(ADC, Rgn1);
  ...
  SelectClipRgn(ADC, Rgn2)  //恢复
  
  此处又该释放些什么? Rgn1? Rgn2?例子3
  BeginPath(ADC)
  ...//构造一个路径
  EndPath(ADC);
  GetClipRgn(ADC, Rgn1);
  SelectClipPath(ADC);
  ...
  SelectClipRgn(Rgn1);    //恢复  此处又该释放些什么??????
  

解决方案 »

  1.   

    一可以把1,2都delete掉啊。你combine之后,那两个区域已经没用了。
      

  2.   

    Create出来的,不用了都要Delete
      

  3.   

    The DeleteObject function deletes a logical pen, brush, font, bitmap, region, or palette, freeing all system resources associated with the object. After the object is deleted, the specified handle is no longer valid. BOOL DeleteObject(
      HGDIOBJ hObject   // handle to graphic object
    );
     
    Parameters
    hObject 
    Handle to a logical pen, brush, font, bitmap, region, or palette. 
    Return Values
    If the function succeeds, the return value is nonzero.If the specified handle is not valid or is currently selected into a device context, the return value is zero. Windows NT: To get extended error information, callGetLastError.Res
    Do not delete a drawing object (pen or brush) while it is still selected into a device context.When a pattern brush is deleted, the bitmap associated with the brush is not deleted. The bitmap must be deleted independently. MSDN资料只提到不要删除pen和brush的,个人觉得应该删除~~反正留着也没什么用
      

  4.   

    CreateRectRgn不用时一定要用DeleteObject函数删除该区域1.释放Rgn1, Rgn22.释放Rgn13.不用释放
    就是创建什么,就释放什么DeleteObject不要删除一个已选入设备场景的画笔、刷子或位图。如删除以位图为基础的阴影(图案)刷子,位图不会由这个函数删除——只有刷子被删掉
    SelectClipRgn 为指定设备场景选择新的剪裁区 该函数拷贝剪裁区;
    这样同一剪裁区可用于多个设备场景,删除它不会影响每个设备场景的剪裁区。
      

  5.   

    1 释放Rgn1 Rgn2
    2 释放Rgn1
    3 不释放CreateRectRgn其实是返回一个数组,在没有select时,应该删除,不过因为只是数组,并不是资源,所以应该一般不会有什么问题出在这里吧。