通常在 Delphi 中使用 GDI+ 你可以使用绘画盒,并在期间进行绘画OnPaint event:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
g: TGPGraphics;
begin
g := TGPGraphics.Create(PaintBox1.Canvas.Handle);
try
g.DrawImage(FSomeImage, 0, 0);
finally
g.Free;
end;
end;
这种范式的问题在于,创建一个破坏一个Graphics每次对象都是浪费且性能不佳。此外,还有一些GDI+ 中可用的构造 http://msdn.microsoft.com/en-us/library/ms534425.aspx你可以only当你有执着的时候使用Graphics object.
问题当然是when我可以创建那个吗Graphics目的?我需要知道句柄何时可用,以及何时不再有效。我需要这些信息,以便我可以创建和销毁我的Graphics object.
解决方案尝试一号
我可以通过在真正需要时创建它来解决创建问题 - 第一次油漆周期叫做:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
if FGraphics = nil then
FGraphics := TGPGraphics.Create(PaintBox1.Canvas.Handle);
FGraphics.DrawImage(FSomeImage, 0, 0);
end;
但我必须知道设备上下文何时不再有效,这样我就可以销毁我的F图形对象,以便下次需要时重新创建它。如果由于某种原因绘画盒的设备上下文被重新创建,下次我将在无效的设备上下文上绘制OnPaint叫做。
Delphi 中的预期机制是什么让我知道什么时候设备上下文句柄 of a 绘画盒是被创建、被破坏还是被重新创建?