dum*_*uch 4 windows delphi gdi clipping
给出以下代码段:
procedure TPicture.PaintLine(_Canvas: TCanvas; _Left, _Top, _Right, _Bottom: Integer);
begin
  IntersectClipRect(_Canvas.Handle, _Left, _Top, _Right, _Bottom);
  try
    _Canvas.MoveTo(_Left - 10, _Top - 10);
    _Canvas.LineTo(_Right + 10, _Bottom + 10);
    // (This is an example only, the actual drawing is much more complex.)
  finally
    SelectClipRgn(_Canvas.Handle, 0); // This does too much
  end;
end;
我想撤消通过调用IntersectClipRect实现的剪辑,以便先前激活的剪辑再次变为活动状态.在上面的代码中,这是由SelectClipRgn(...,0)完成的,它完全关闭了裁剪.这种方法很有效,但之后没有裁剪活动,因此在上面执行之后执行的某些绘图将绘制到不应绘制的区域.
那么,只撤消IntersectClipRect效果的正确方法是什么?
编辑:在我理解了Sertac的评论之后删除了不必要的CreateRectRgn和DeleteObject代码,以使其他人可以在以后偶然发现这个问题时更具可读性.
var
  //  RGN: HRGN;
  SavedDC: Integer;
begin
//  RGN := CreateRectRgn(_Left, _Top, _Right, _Bottom);
  SavedDC := SaveDC(_Canvas.Handle);
  try
    IntersectClipRect(_Canvas.Handle, _Left, _Top, _Right, _Bottom);
    _Canvas.MoveTo(_Left - 10, _Top - 10);
    _Canvas.LineTo(_Right + 10, _Bottom + 10);
    // (This is an example only, the actual drawing is much more complex.)
  finally
    RestoreDC(_Canvas.Handle, SavedDC);
  end;
  ...