|
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. | Funkcja | Kształ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 )
|