¿Qué pasa con el DC cuando libero un lienzo?
-
29-10-2019 - |
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;
Solución
TCanvas
no tiene su propio DC, ni adquiere ni libera un DC.Su descendiente TControlCanvas
lo hace.
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