Pregunta

En este código, esperaría que ocurriera una llamada a ReleaseDC en MyCanvas.Free, pero este código funciona bien, ¿cómo es posible?
¿Y qué pasa con el propio DC de TCanvas?

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;
¿Fue útil?

Solución

TCanvas no tiene su propio DC, ni adquiere ni libera un DC.Su descendiente TControlCanvas lo hace.

De TCanvas.Handle Property

TCanvas no es propietario de HDC. Las aplicaciones deben crear un HDC y establezca la propiedad Handle.Aplicaciones debe liberar el HDC cuando el lienzo ya no lo necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top