Kurs GTK+ – rozdział 4
Ostrzeżenie
Ten post został opublikowany 13 lat temu. Informacje mogą być przestarzałe, poglądy autora mogły ewoluować lub post może być nieaktualny w jakiś inny sposób. Weź to pod uwagę podczas czytania tego posta.4. Zdarzenia
4.1. Zamknięcie okna
Zauważyłeś zapewne, że po zamknięciu okna, proces programu dalej działał. Dzieje się tak, ponieważ nie dodaliśmy przechwytywania zdarzeń. To będzie właśnie tematem tego rozdziału kursu.
Za dodawanie akcji, które będą wykonywane w przypadku jakiegoś zdarzenia, służy:
gulong
Pierwszym argumentem jest instancja, do której ma zostać podłączone nasze zdarzenie, następnym jest nazwa sygnału, kolejnym wykonywana funkcja i ostatnim — argumenty dla niej. Powyższą funkcję będziemy wywoływać przed gtk_widget_show_all()
.
Nazwą sygnału dla zamknięcia okna jest destroy
. Za zakończenie działania głównej pętli GTK+ odpowiedzialna jest funkcja gtk_main_quit()
. Tak więc aby po zamknięciu okna programu został zakończony jego proces, należy dopisać następującą linijkę:
;
Od tej pory zamykając okno programu, zostanie zakończony również proces.
4.2. Przesuwanie okna
Z wiedzą zdobytą w poprzednich rozdziałach możemy rozbudować nasz program, by po przesunięciu okna wyświetlał aktualną pozycję względem lewego górnego rogu pulpitu. Stwórzmy sobie więc następującą funkcję:
void
Na początku definiujemy 3 zmienne: x
i y
, które nam będą przechowywały położenie okna, oraz polozenie
, która nam to przechowa już w postaci tekstu.
W zdarzenie->configure
znajdziemy położenie okna. Przypisujemy je do zmiennych x
i y
. Następnie za pomocą funkcji sprintf()
zamieniamy liczby na tekst, a na końcu ustawiamy nowy tytuł okna.
Pozostało nam jeszcze dodać nowe zdarzenie do okna programu. Wykorzystamy oczywiście znaną nam już funkcję g_signal_connect()
. Wykorzystamy zdarzenie configure-event
. Argumenty do naszej funkcji zostaną automatycznie przesłane. Tak więc nad wywołaniem funkcji gtk_widget_show_all()
dopisujemy:
;
Nasz program wygląda teraz tak:
W następnym rozdziale omówię kontenery.