Powrót na stronę główną www.And3mD.prv.pl

Menu:
Strona Początkowa
Co Nowego?
BeOS/OpenBeOS
Linux
Podstawy C/C++
C FAQ
Biblioteki stand. C (GNU libc)
Programowanie w Linuxie
Programowanie w BeOSie
GLib
GTK
OpenGL
SDL
Moje Programy
Download
Linki
Pozdrowienia
Autor




Pierwsze okno :



Po "lekkiej" drugiej części kursu czas wrócić do prawdziwego kodowania.
Ponieważ BeOS jest systemem operacyjnym, którego głównym sposobem komunikowania się z użytkownikiem jest graficzny interfejs użytkownika (GUI). Dobrze byłoby nauczyć się tworzyć okna.

Klasą definiującą obiekt okna w BeOsie jest BWindow. Obiekty okien w BeOSie możemy tworzyć dopiero po stworzeniu obiektu aplikacji (o tworzeniu obiektu aplikacji pisałem w pierwszej części kursu).

Konstruktor klasy BWindow:

Klasa BWindow posiada kilka różnych konstruktorów, oto dwa najczęściej stosowane :

BWindow( BRect frame, const char * title, window_type type, uint32 flags, uint32 workspaces = B_CURRENT_WORKSPACE);

BWindow(BRect frame, const char * title,window_look look,window_feel feel, uint32 flags, uint32 workspace = B_CURRENT_WORKSPACE);

Opis argumentów :
  • frame - obiekt typu BRect określający rozmiar obszaru roboczego okna i jego położenie.
    Obiekty klasy BRect stosowane są wszędzie tam gdzie trzeba określić jakiś prostokątny obszar. Klasa BRect opiera się on na czterech podstawowych polach danych:
    float left - odległość lewej krawędzi prostokąta od lewej krawędzi ekranu
    float top - odległość górnej krawędzi prostokąta od górnej krawędzi ekranu
    float right - szerokość prostokąta
    float bottom - wysokość prostokąta
    Do tworzenia obiektów BRect zwykle wykorzystujemy poniższy konstruktor, przyjmujący cztery argumenty określające wartość każdego pola danych :

    BRect(float left, float top, float right, float bottom)

    czyli opisanie prostokąta odległego o 20 punktów od lewej krawędzi ekranu, o 30 od górnej krawędzi ekranu i rozmiarach szerokość 400, wysokość 200 będzie wyglądało następująco :

    Prostokat BRect(20,30,400,200);

  • title - łańcuch znaków określający tytuł okna

  • look - flaga określająca wygląd okna :

    B_DOCUMENT_WINDOW_LOOK - duży pasek tytułu, grube obramowanie, duży kwadrat do zmiany rozmiaru okna w prawym dolnym rogu:



    B_TITLED_WINDOW_LOOK - to samo co wyżej ale kwadrat do zmiany rozmiaru został zastąpiony wyznaczeniem części obramowania okna:



    B_FLOATING_WINDOW_LOOK - mały pasek tytułu, wąskie obramowanie, prawy dolny róg obramowania służy do zmiany rozmiaru okna:



    B_MODAL_WINDOW_LOOK - brak pasku tytułowego, grube obramowanie, brak kontrolki zmiany rozmiaru okna:



    B_BORDERED_WINDOW_LOOK - brak paska tyułowego, obramowanie, brak kontrolki zmiany rozmiaru okna:



    B_NO_BORDER_WINDOW_LOOK - brak wszelkich ozdób okna

  • feel - określa zachowanie okna, najważniejsze wartości to :

    Najważniejsze wartości dla argumentu feel
    B_NORMAL_WINDOW_FEELokno zachowuje się normalnie
    B_FLOATING_ALL_WINDOW_FEELokno występuje zawsze na wierzchu, na wszystkich pulpitach
    B_MODAL_ALL_WINDOW_FEELokno występuje na zawsze na wierzchu, blokuje dostęp do wszystkich innych na wszystkich pulpitach

  • type - argument zastępujący feel i look w drugim konstruktorze, tak naprawdę jest to kombinacja wartości feel i look, najważniejsze wartości to :

    Najważniejsze wartości dla argumentu type
    B_TITLED_WINDOWokno wyglądające jak B_TITLED_WINDOW_LOOK i zachowujące się normalnie (B_NORMAL_WINDOW_FEEL)
    B_DOCUMENT_WINDOWokno wyglądające jak B_DOCUMENT_WINDOW_LOOK i zachowujące się normalnie (B_NORMAL_WINDOW_FEEL)
    B_MODAL_WINDOWokno wyglądające jak B_MODAL_WINDOW_LOOK i blokujące dostęp do wszystkich innych okien aplikacji (B_MODAL_APP_WINDOW_FEEL)
    B_BORDERED_WINDOWokno wyglądające jak B_BORDERED_WINDOW_LOOK i zachowujące się normalnie
    B_UNTYPED_WINDOWokno o nieznanym typie

  • flags - parametr ten określa inne opcje okna np. czy użytkownik może powiększyć okno itp. Najważniejsze wartości :

    Najważniejsze wartości dla argumentu flags
    B_NOT_MOVABLEnie pozwala przemieścić okna
    B_NOT_CLOSABLEutworzone okno nie posiada przycisku zamknij na pasku tytułowym
    B_NOT_ZOOMABLEutworzone okno nie posiada przycisku maksymalizuj(zoom) na pasku tytułowym
    B_NOT_MINIMIZABLEnie pozwala zminimalizować okna przez podwójne kliknięcie w pasek tytułowy
    B_NOT_H_RESIZABLEnie pozwala zmieniać rozmiaru okna w poziomie
    B_NOT_V_RESIZABLEnie pozwala zmieniać rozmiaru okna w pionie
    B_NOT_RESIZABLEnie pozwala zmieniać rozmiaru okna w żadnym kierunku

  • workspaces - określa pulpit na którym ma być widoczne okno, najważniejsze wartości to:

    Najważniejsze wartości dla argumentu workspaces
    B_CURRENT_WORKSPACEokno ukaże się na aktywnym pulpicie
    B_ALL_WORKSPACESokno będzie widoczne na wszystkich pulpitach
Jak widać możliwości jest naprawdę dużo, a i tak przedstawiłem jedynie te najważniejsze.

Tworzenie okna :

Stwórzmy więc własną klasę okna (opartą na BWindow), która będzie służyła do utworzenia normalnego okna o rozmiarze 300x200 zaczynając od punktu 20,20.

Na początku musimy dodać plik nagłówkowy Window.h :

#include<Window.h>

Następnie stworzyć obiekt typu BRect określający obszar roboczy okna :

obszarroboczy BRect(20,20,300,200);

Teraz definiujemy naszą klasę okna :

class PierwszeOkno : public BWindow
{
public :
PierwszeOkno():BWindow(obszarroboczy,"Pierwsze okno",B_TITLED_WINDOW,0,B_CURRENT_WORKSPACE)
    {
    }
};


Później tworzymy wskaźnik typu PierwszeOkno :

PierwszeOkno * POkno;

Ostatnim krokiem tworzenia okna jest utworzenie obiektu za pomocą operatora new. Zrobimy to w funkcji main() zaraz po stworzeniu obiektu aplikacji (obiekt aplikacji musi być tworzony wcześniej).

POkno = new PierwszeOkno;

Pełny kod programu wygląda następująco :

//main.cpp
#include<Application.h>
#include<Window.h>

BRect obszarokna(20,20,300,200);

class PierwszeOkno : public BWindow
{
public :
PierwszeOkno():BWindow(obszarokna,"Pierwsze okno",B_TITLED_WINDOW,0,B_CURRENT_WORKSPACE)
   {
   }
};

PierwszeOkno * POkno;

class PierwszaApp : public BApplication
{
public :
PierwszaApp():BApplication("application/pierwszaapp_z_oknem")
   {
   }
};

int main()
{
new PierwszaApp;
POkno = new PierwszeOkno;
POkno->Show();
be_app->Run();
delete be_app;
}


W programie występuje jedna nieznana prędzej funkcja - Show() z klasy BWindow. Zadaniem tej funkcji jest wyświetlenie okna.

Nasza aplikacja ma małe niedociągnięcie. Zamknięcie okna nie kończy aplikacji, jak rozwiązać ten problem i jeszcze więcej na temat okien w BeOSie w następnej części kursu.

Program przykładowy "PierwszeOkno" można pobrać stąd [Link].

Powrót


And3mD online - www.and3md.prv.pl
Kontakt: And3mD@interia.pl