Что происходит с DC, когда я освобождаю холст? - PullRequest
4 голосов
/ 18 июня 2011

В этом коде я ожидал бы, что вызов ReleaseDC произойдет в MyCanvas.Free, но этот код работает нормально, как получится?
А что происходит с собственным DC 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;

1 Ответ

8 голосов
/ 18 июня 2011

TCanvas не имеет своего собственного DC, он не получает и не выпускает DC. Его потомок TControlCanvas делает.

От TCanvas.Handle Property

TCanvas не владеет HDC. Приложения должны создавать HDC и установите свойство Handle. Приложения должен освободить HDC, когда холст больше не нужно.

...