Nieprostokątne okna
Nieprostokątne okna PDF Drukuj Email
Wpisał doctor   
Sobota, 10. Luty 2007 03:04

Tworzenie okien o różnych kształtach 

C++ Builder umożliwia stworzenie nieprostokątnych okien.
Region jest obiektem graficznego interfejsu użytkownika (GDI).
Mamy do wyboru zaokrąglone prostokąty, elipsy czy kształt ograniczony przez odcinki.
Jedyną niedogodnością jest brak antyalisingu, przez co widać postrzępione brzegi.

Stworzenie okna o dowolnym kształcie wymaga stworzenia obszaru zwanego REGIONEM.
Sam region jest tworzony w prostokątnym (a jakże!) obszarze formy.

Przykład
Stworzymy okno o zaokrąglonych narożnikach. Będziemy korzystali z 2 funkcji:
do stworzenia regionu, CreateRoundRectRgn(lewy_x, gormy_y, prawy_x, dolny_y, promien_x, promien_y)
do ustawienia kształtu okna SetWindowRgn(Handle, Region, bool redraw);

Handle to uchwyt do formy.
Promien_x oraz y definiują promień elipsy, czyli jak mocno będą zaokrąglone narożniki.
Zmienna redraw typu bool mówi, czy odmalować kontrolki, z reguły ustawiona an true.

void __fastcall TForm1::FormCreate(TObject *Sender)
{
HRGN Region = CreateRoundRectRgn(0, 0, Form1->Width, Form1->Height, 23, 23);
SetWindowRgn(Handle, Region, true);
}

 A otrzymany efekt wygląda tak:

 

 
 

 

Poniżej przedstawię wszystkie możliwe funkcje służące do definiowania kształtu okien.

 FunkcjaKształt
 

CreateEllipticRgn

 elipsa
 

CreateEllipticRgnIndirect

 elipsa wpisana w prostokąt o podanych wymiarach
 

CreatePolygonRgn

 wielokąt, podaje się wierzchołki i rodzaj wypełnienia
 

CreatePolyPolygonRgn

 kilka wielokątów
 

CreateRectRgn

 prostokąta
 

CreateRectRgnIndirect

 prostokąta podanego jako parametr
 

CreateRoundRectRgn

 zaokrąglony prostokąt
 

ExtCreateRegion

 transformacja danego regionu
 

CombineRgn

 kombinacja dwóch regionów, np. suma elipsy i prostokąta

 

Zmieniony ( Sobota, 10. Luty 2007 03:10 )
 
 

Losowy obraz

b9.jpg

Gościmy

Naszą witrynę przegląda teraz 18 gości 
Dzwonki polifoniczne

Alveo | karty plastikowe | klimatyzacja | wrzody żołądka | Apteka