通常在 Delphi 中使用 GDI+,您可以使用TPaintBox,并在OnPaint事件期间进行绘制:
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+中还有一些结构可用,您只能在拥有持久图形对象时使用。
当然,问题是我什么时候可以创建那个Graphics对象?我需要知道句柄何时可用,然后何时不再有效。我需要这些信息,以便创建和销毁我的Graphics对象。
解决方案尝试 Nº1
我可以通过在真正需要时创建它来解决创建问题 - 在第一次调用绘制周期时:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
if FGraphics = nil then
FGraphics := TGPGraphics.Create(PaintBox1.Canvas.Handle);
FGraphics.DrawImage(FSomeImage, 0, 0);
end;
但是我必须知道设备上下文何时不再有效,所以我可以销毁我的FGraphcis对象,以便在下次需要时重新创建它。如果由于某种原因重新创建了TPaintBox的设备上下文,我将在下次调用OnPaint时绘制无效的设备上下文。
Delphi 中的预期机制是什么让我知道何时创建、销毁或重新创建TPaintBox的设备上下文句柄?