O que acontece com o DC quando eu liberar uma tela?
-
29-10-2019 - |
Pergunta
Nesse código, eu esperaria que uma chamada para ReleaseDC
acontecesse em MyCanvas.Free
, mas esse código funciona bem, por que?
E o que acontece com o próprio DC do 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;
Solução
TCanvas
não tem seu próprio DC, ele não adquire nem libera um DC.Seu TControlCanvas
descendente sim.
TCanvas não possui o HDC. Os aplicativos devem criar um HDC e defina a propriedade Handle.Formulários deve liberar o HDC quando a tela não precisa mais disso.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow