闲谈Graphics单元

本文介绍了VCL中的图象显示核心单元Graphics,将图象对象分为TGriphics和TGriphicsObject两大类,分别比作绘图体和绘图工具体,还提到TFont、TPen、TBrush这3个对象组成了TCanvas。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文中如果有错误的地方,您可以通过ttch007@sina.com联系笔者, 同时希望能与大家共同讨论

 

   VCL中的图象显示核心单元Graphics,其中主要把图象对象分为2大类TGriphics

TGriphicsObject,两者从字面意义讲一个是图象体,一个是图象工具。打个比喻一个是

绘图体,一个是绘图工具体。接下来我们具体了解以下这个单元是怎么封装的这个单元。

 

TFont,TPen,TBrush3个对象组成了TCanvas

你可以看到图1TFont,TPen,TBrush 3个类都来之TGriphicsObject,TGriphicsObject

是个有存储能力的持久类。了解TCanvas的基础是了解这3个对象,他们提供了TCanvas基本的功能和数据,TCanvas是靠这3个对象的数据开始运做的。在TFont,TPen,TBrush都做了什么来提供给TCanvas的数据的?

 

带这个疑问我们看看TFont,TBrush,TPen

我们首先看看TGraphicsObject提供了给这3个类

  TGraphicsObject = class(TPersistent)

  private

    FOnChange: TNotifyEvent;

    FResource: PResource;

    FOwnerLock: PRTLCriticalSection;

  protected

    procedure Changed; dynamic;

    procedure Lock;

    procedure Unlock;

  public

    function HandleAllocated: Boolean;

    property OnChange: TNotifyEvent read FOnChange write FOnChange;

    property OwnerCriticalSection: PRTLCriticalSection read FOwnerLock write FOwnerLock;

  end;

从上面我们可以看到  TGraphics提供了标准的改变事件函数指针,Resource指针,临界区锁定功能,那么Resource指针指向的结构都有什么?

PResource = ^TResource;

  TResource = record

    Next: PResource;

    RefCount: Integer;

    Handle: THandle;

    HashCode: Word;

    case Integer of

      0: (Data: TResData);

      1: (Font: TFontData);

      2: (Pen: TPenData);

      3: (Brush: TBrushData);

  end;

上面就是他的结构体

他是一个HASH表,数据结构的东西就不讲,我们跳过,你可以看到其中还有4个结构体,那里就有我们这个单元要谈的3个类的属性存储结构,按号入位,大家都找到了吧。

我们跳过3个结构体,直接讲解下面的机制。

我们知道了TGraphics提供了给这3个类最基本的功能,那么我们接下来要知道这3个类是如何被建立和设定属性的方式。

TResourceManager是一个建立实际数据空间的类,他主要为这3个类提供真正的数据空间。(他和WINDOWS没有关系)这样讲也许有人不会他理解,我画了一个图,大家可以在压缩包中找到相应的图片(ThreeClass.png)里面有详细的介绍.

 

先到这  先是简单的介绍一下机制,以后再谈其中的具体操作细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值