排除不必要的绘制区域,降低绘制量

 

 

procedure DrawBorder(Handle: THandle; ADC: HDC);
var
  R: TRect;
  Canvas: TCanvas;
  P: TPoint;
begin
  Canvas := TCanvas.Create;
  Canvas.Handle := ADC;

  P := Point(0, 0);
  Windows.ClientToScreen(Handle, P);
  Windows.GetWindowRect(Handle, R);
  P.X := P.X - R.Left;
  P.Y := P.Y - R.Top;

  Windows.GetClientRect(Handle, R);

  ///  排除不需要绘制的区域
  ///    优点: 1、不会绘出界外
  ///           2、当面积比较大如背景,拖拽缩放时不会出现大面积色块问题
  ///
  ExcludeClipRect(Canvas.Handle, P.X, P.Y, R.Right - R.Left + P.X, R.Bottom - R.Top + P.Y);

  Windows.GetWindowRect(Handle, R);
  OffsetRect(R, -R.Left, -R.Top);

  /// 绘制背景
  ///PaintBackground(Canvas, R);

  /// 清除剪切区域
  SelectClipRgn(Canvas.Handle, 0);

  Canvas.Handle := 0;
  Canvas.Free;
end;

 相关函数

    SelectClipRgn

    GetClipBox

 

posted @ 2014-08-26 16:17  cmacro  阅读(638)  评论(0编辑  收藏  举报