Wyjaśnienie działania funkcji SetWindowExtEx i SetViewportExtEx

0

Prosiłbym o objaśnienie funkcji SetWindowExtEx oraz SetViewportExtEx. Znalazłem je próbując skalować rysowane linie, nie potrafię jednak z nich korzystać.

Rysując po formie wpisałem do nich następujące parametry:

SetWindowExtEx(Canvas.Handle, 1, 1, Nil);
SetViewportExtEx(Canvas.Handle, 1, 1, Nil);

Zmiana jedynek w różnych kombinacjach na inne wartości nie przyniosły żadnego rezultatu.

0

Nie korzystałem nigdy z tych funkcji, mogę tylko podać odnośniki do MSDN'u. A w praktyce co i jak to ktoś inny Tobie może coś doradzi. Tym bardziej jeśli po lekturze opisów na MSDN nic Ci to nie dało.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd145100(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dd145098(v=vs.85).aspx

0

Tak, widziałem to, jednak mimo to nie pojmuję. ;) Tworzę najróżniejsze kombinacje, tworzyłem też zmienną typu PSize i wrzucałem ją zamiast nil, jednak nic się nie zmienia podczas rysowania. Funkcje wywołuję bezpośrednio przed użyciem Canvas. Chcę uzyskać efekt zmiany skali. Ewentualnie mże ktoś zna inny sposób zmiany skali?

0

Jak to zwykle bywa, odpocząłem trochę od pisania kodu, dzisiaj usiadłem i zaczęło nagle działać.

 SetMapMode(Canvas.Handle, MM_ISOTROPIC); // wymagane do użycia poniższych funkcji.
 SetWindowExtEx(Canvas.Handle, 1, 1, nil);
 SetViewportExtEx(Canvas.Handle, 2, 2, nil); // dwukrotne powiększenie rysowanego obiektu
 SetViewPortorgEx(Canvas.handle, clientwidth div 2,clientheight div 2,nil); // przesunięcie środka współrzędnych z lewego górnego rogu na środek formy

 Canvas.LineTo(100,100);

Nie rozpracowałem jednak tematu jeszcze do końca. Funkcje te należy wywoływać każdorazowo bezpośrednio przed rysowaniem, inaczej stosowane są wartości domyślne.
Jeśli użyjemy samej funkcji SetMapMode lub wrzucimy ją po funkcjach Set... (ale wtedy te nie zadziałają...) , to obrócimy układ współrzędnych na kartezjański.
Skalę zmieniamy za pomocą SetViewportExtEx. Zmieniamy ją zmieniając dwie wartości (dla osi X i Y osobno), w przykładzie dwukrotne powiększenie. Jeśli użyjemy wartości ujemnnych, skalę zmniejszymy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1