Delphi 设备描述表 ;TCanvas...

本文介绍了Windows中的设备描述表(DC)及其在Delphi编程中的应用,特别是通过TCanvas类简化了对DC的操作。TCanvas允许在窗口、桌面、内存或打印机等表面上进行绘图,并且自动处理资源释放,避免了资源泄露的问题。文章还提及TCanvas的主要属性和方法,为后续深入学习TCanvas奠定了基础。
摘要由CSDN通过智能技术生成

设备描述表与TCanvas(Device Contexts and TCanvas)

Windows使用术语设备描述表(device context,后面简称为DC)描述用户可在其上画图的画布。DC可用来在许多表面上画图:

  • 窗口客户区或框架(To a window's client area or frame)
  • 桌面(To the desktop)
  • 内存(To memory)
  • 打印机或其他输出设备(To a printer or other output device)

这些仅仅是一些列子,还有许多其他的不太为人所知的DC(如菜单),但是以上列举都是用户非常感兴趣的DC。

在API级别处理DC要复杂些。首先必须从Windows中的到DC处理程序。然后选择各种对象进入DC中(笔pen、刷子brush、字体font),然后便可在DC中画图,画图完毕后,必须确保进入DC的各种对象在清除之后再删除DC。如果忘记清除DC中的各种对象,应用程序将使内存溢出。

幸运的是VCL提供有TCanvas类以便较容易地处理DC。举一个简单的例子,下面的程序使用Windows API在屏幕上绘制圆,内圆为红色,边框为蓝色。

 

procedure TForm1.Button1Click(Sender: TObject); 
var
  DC: HDC;
  Brush, OldBrush: HBRUSH;
  Pen, OldPen: HPEN;
begin
  DC := GetDC(Handle);
  Brush := CreateSolidBrush(RGB(255, 0, 0));
  Pen := CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
  OldBrush := SelectObject(DC, Brush);
  OldPen := SelectObject(DC, Pen);
  Ellipse(DC, 20, 20, 120, 120);
  SelectObject(DC, OldBrush);
  SelectObject(dc, OldPen);
  ReleaseDC(Handle, DC);
end;

 

以上代码是不是太差,但是当处理完DC之后,使人容易忘记恢复对象,如果忘记了,其应用程序将会资源泄露。下面的代码与上面代码等价,但是用VCL写的:

 

procedure TForm1.Button2Click(Sender: TObject); 
begin 
  Canvas.Brush.Color := clRed; 
  Canvas.Pen.Color := clBlue; 
  Canvas.Ellipse(20, 20, 120, 120); 
end; 

 

该代码不但短小易读,而且也很健壮。

TCanvas根据需要负责释放资源,因此不必担心资源问题。

TCanvas是一种比使用API更简单有效的方法。

TCanvas继承关系如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值