Autor Wątek: Odświerzanie części okna - C#  (Przeczytany 3054 razy)

Offline _Wojciech_

  • Użytkownik

# Luty 27, 2006, 20:20:07
Jak w C# zrobić takie coś:
1. Jest okno, na którym są narysowane obrazki (bitmapy) lub linie, koła, itp.
2. Teraz program działa tak, że użytkownik przeciąga sobie z menu jakiś element i umieszcza go na ekranie. Ale zanim go umieści, to jeździ nim po ekranie jak chce.
Jak zapewnić odświerzanie tej części ekranu, nad którym przed chwilą coś narysowaliśmy (przeciągaliśmy element nad tym fragmentem ekranu)?
Jak się ktoś bawił programami do elektryki (gdzie się umieszcza elementy, łączy je, itp.) to wie w czym problem.
W API to polegało na skopiowaniu kawałeczka HDC i odmalowaniu go za chwilę. A w C#?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline mINA87

  • Użytkownik

# Luty 27, 2006, 20:59:03
nie wiem, ale nie mozna najpierw rysowac tla - elementow a na nich dopiero kursora z przyklejonym elementem ?

Offline _Wojciech_

  • Użytkownik

# Luty 27, 2006, 21:23:38
Można, ale wtedy trzeba odświerzać całe tło non stop (na event MouseMove). Nie próbowałem, ale to chyba zarżnie wydajność. A zresztą po co. To się musi dać zrobić.

Offline mINA87

  • Użytkownik

# Luty 27, 2006, 21:38:25
lol wydajność ? jak to zbuforujesz to bedziesz mial chyba lepsza niz jak zrobisz to o czym myslisz... poza tym jak zrobisz tak jak mowisz to to tragicznie chyba bedzie wygladalo.... musisz jakos buforowac to co rysujesz bo inaczej shit bedzie - miganie masakryczne.. a w shit forms nie daja dostepu do plotna or sth ? na pewno jest... pewnie opakowane ladnie w klase nawet

agent_J

  • Gość
# Luty 27, 2006, 22:00:52
A nie ma czegoś takiego jak InvalidateRect w WinAPI ?
Pozatym buforowanie i tak musi być.

Offline _Wojciech_

  • Użytkownik

# Luty 27, 2006, 22:26:15
Ojejku.
Trzeba buforować, ale tylko kawałeczek.
Chodzi m i o to, żeby nie odmalowywać całego ekranu.
W miejscu gdzie jest kursor zapamietujemy kawałek ekranu (powiedzmy 64x64 pixle), rysujemy coś, co przesuwamy za kursorem myszy. Następnie przy evencie MouseMove kopiujemy ten zachowany kawałek na ekran (czyli odtwarzamy to co było) i całość powtarzamy trochę dalej. To jest najbardziej popularna metoda rozwiązania tego typu problemu. Po co odświerzać cały ekran. W WinAPI to banał.

//EDIT: Pytam tylko jak to zrobić w C#. W WinAPI wiem :-)

agent_J

  • Gość
# Luty 27, 2006, 23:49:23
A w C# nie ma czegoś takiego jak Canvas, który służy właśnie do w/w celów.

// Edit: dodany link

http://www.codeproject.com/cs/miscctrl/canvas.asp