绘图表面(Graphics, 这在 VCL 体系中叫 Canvas), 在 GdiPlus 中有四种获取方法:
1、通过窗口句柄获取;
2、通过窗口的 Canvas.Handle 获取;
3、通过 GdiPlus 利用 Helper 技术给部分 VCL 对象添加的 ToGPGraphics 方法获取;
4、通过图像对象获取.
本例效果图:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GdiPlus, GdiPlusHelpers; //从窗口句柄获取 IGPGraphics procedure TForm1.Button1Click(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; begin Graphics := TGPGraphics.Create(Handle); Pen := TGPPen.Create(TGPColor.Red, 2); Graphics.DrawEllipse(Pen, 20, 10, 150, 40); end; //从 HDC 获取 IGPGraphics procedure TForm1.Button2Click(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; begin Graphics := TGPGraphics.Create(Canvas.Handle); Pen := TGPPen.Create(TGPColor.Green, 2); Graphics.DrawEllipse(Pen, 20, 40, 150, 40); end; //使用 GdiPlusHelpers 为 Canvas 添加的 ToGPGraphics 方法获取 IGPGraphics procedure TForm1.Button3Click(Sender: TObject); var Graphics: IGPGraphics; Pen: IGPPen; begin Graphics := Canvas.ToGPGraphics; Pen := TGPPen.Create(TGPColor.Blue, 2); Graphics.DrawEllipse(Pen, 20, 70, 150, 40); end; //从图像建立 IGPGraphics procedure TForm1.Button4Click(Sender: TObject); var GraphicsImg: IGPGraphics; Pen: IGPPen; Image: IGPImage; begin Image := TGPBitmap.Create(152, 42); GraphicsImg := TGPGraphics.Create(Image); Pen := TGPPen.Create(TGPColor.Fuchsia, 2); GraphicsImg.DrawEllipse(Pen, 0, 0, Image.Width-2, Image.Height-2); Canvas.ToGPGraphics.DrawImage(Image, 20, 100); end; end.