当我释放画布时,DC会发生什么?

时间:2011-06-17 22:36:11

标签: delphi canvas device-context

在此代码中,我希望在ReleaseDC中调用MyCanvas.Free,但此代码运行正常,为什么? TCanvas自己的DC会发生什么?

var GlobalDC: THandle;

procedure TForm1.FormCreate(Sender: TObject);
begin
   GlobalDC:= GetDC(0);
end;

function LoopMeOften(const X, Y: Integer): TColor;
var
  MyCanvas: TCanvas;
begin
  MyCanvas := TCanvas.Create;
  MyCanvas.Handle := GlobalDC;
  Result := GetPixel(MyCanvas.Handle, X, Y);
  MyCanvas.Free;
end;

1 个答案:

答案 0 :(得分:8)

TCanvas没有自己的DC,它既不获取也不释放DC。它的后代TControlCanvas

来自TCanvas.Handle Property

  

TCanvas不拥有HDC。   应用程序必须创建一个HDC和   设置Handle属性。应用   必须在画布时释放HDC   不再需要它。