Rysowanie na pulpicie

Odysseus
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam kod, w którym zadeklarowano klasę

Kopiuj
type
  TDesktopCanvas=class(TCanvas)
  private
    DC:HDC;
  itd...
  end;

Nazwa mówi sama za siebie. Dzięki niej można wykonywać operacje graficzne na pulpicie. Deklaracja konstruktora tej klasy wygląda następująco:

Kopiuj
constructor TDesktopCanvas.Create;
begin
  inherited Create;
  DC:=GetDC(0);
  Handle:=DC;
end;

Czy może mi ktoś wyjaśnić dlaczego parametrem funkcji GetDC musi być tutaj 0 (zero)?

Adamo
  • Rejestracja: dni
  • Ostatnio: dni
0

bo dając 0 pobiera uchwyt jakby ekranu zamiast 0 możesz dać GetDesktopWindow - będzie bardziej logicznie

Odysseus
  • Rejestracja: dni
  • Ostatnio: dni
0
Adamo napisał(a)

bo dając 0 pobiera uchwyt jakby ekranu zamiast 0 możesz dać GetDesktopWindow - będzie bardziej logicznie

...i tak też robiłem. Z tym, że po zastosowaniu GetDesktopWindow nic się nie rysuje. Sprawdziłem... U mnie GetDesktopWindow zwraca wartość 128 (dziesiętnie).

Adamo
  • Rejestracja: dni
  • Ostatnio: dni
0

bo wtedy GetWindowDC zamiast GetDC chyba

Odysseus
  • Rejestracja: dni
  • Ostatnio: dni
0
Adamo napisał(a)

bo wtedy GetWindowDC zamiast GetDC chyba

Bingo! Tylko czemu tak się dzieje? GetDC udostępnia obszar kliencki gdy GetWindowDC udostępnia obszar całego okna?...

Adamo
  • Rejestracja: dni
  • Ostatnio: dni
0

ja bym to opisał że GetDC daje wskaźnik do płótna utworzonego jako ... czy coś w tym stylu, a GetWindowDC daje wskaźnik do płótna okna o wskaźniku jak w parametrze

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

Rysowanie po pulpicie jest przesrane. Trzeba reagować na odmalowanie się pulitu(jak ktoś np. przesunie ikonkę). A to mimo wszystko jest przesrane.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.