|
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_FEEL | okno zachowuje się normalnie |
B_FLOATING_ALL_WINDOW_FEEL | okno występuje zawsze na wierzchu, na wszystkich pulpitach |
B_MODAL_ALL_WINDOW_FEEL | okno 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_WINDOW | okno wyglądające jak B_TITLED_WINDOW_LOOK i zachowujące się normalnie (B_NORMAL_WINDOW_FEEL ) |
B_DOCUMENT_WINDOW | okno wyglądające jak B_DOCUMENT_WINDOW_LOOK i zachowujące się normalnie (B_NORMAL_WINDOW_FEEL ) |
B_MODAL_WINDOW | okno 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_WINDOW | okno wyglądające jak B_BORDERED_WINDOW_LOOK i zachowujące się normalnie |
B_UNTYPED_WINDOW | okno 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_MOVABLE | nie pozwala przemieścić okna |
B_NOT_CLOSABLE | utworzone okno nie posiada przycisku zamknij na pasku tytułowym |
B_NOT_ZOOMABLE | utworzone okno nie posiada przycisku maksymalizuj(zoom) na pasku tytułowym |
B_NOT_MINIMIZABLE | nie pozwala zminimalizować okna przez podwójne kliknięcie w pasek tytułowy |
B_NOT_H_RESIZABLE | nie pozwala zmieniać rozmiaru okna w poziomie |
B_NOT_V_RESIZABLE | nie pozwala zmieniać rozmiaru okna w pionie |
B_NOT_RESIZABLE | nie 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_WORKSPACE | okno ukaże się na aktywnym pulpicie |
B_ALL_WORKSPACES | okno 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
|