Warsztat.GD

Programowanie => Językoznawstwo => C# => Wątek zaczęty przez: _Wojciech_ w Luty 27, 2006, 20:20:07

Tytuł: Odświerzanie części okna - C#
Wiadomość wysłana przez: _Wojciech_ w 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#?
Tytuł: Odp: Odświerzanie części okna - C#
Wiadomość wysłana przez: mINA87 w Luty 27, 2006, 20:59:03
nie wiem, ale nie mozna najpierw rysowac tla - elementow a na nich dopiero kursora z przyklejonym elementem ?
Tytuł: Odp: Odświerzanie części okna - C#
Wiadomość wysłana przez: _Wojciech_ w 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ć.
Tytuł: Odp: Odświerzanie części okna - C#
Wiadomość wysłana przez: mINA87 w 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
Tytuł: Odp: Odświerzanie części okna - C#
Wiadomość wysłana przez: Antrykot w Luty 27, 2006, 22:00:52
A nie ma czegoś takiego jak InvalidateRect w WinAPI ?
Pozatym buforowanie i tak musi być.
Tytuł: Odp: Odświerzanie części okna - C#
Wiadomość wysłana przez: _Wojciech_ w 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 :-)
Tytuł: Odp: Odświerzanie części okna - C#
Wiadomość wysłana przez: agent_J w 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