Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałKonstantyn Świętoń Został zmieniony 9 lat temu
1
Systemy operacyjne Wykład 3a Działanie aplikacji okienkowej dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz 1
2
Programowanie zdarzeniowe Ideą programowania zdarzeniowego jest to, że zaimplementowane przez nas funkcje nie są wywoływane jawnie w kodzie programu, lecz przez system operacyjny lub wydzielony moduł programu. Funkcje te nazywa się zwrotnymi (callback). Jest to nawiązanie do idei przerwań Komunikaty: Funkcje obsługujące tzw. kolejkę komunikatów pochodzących od systemu lub: mysz; klawiatura; zmiana w interfejsie graficznym programu; zegar; operacje plikowe lub sieciowe. Wyjątki: Funkcje obsługujące błędy czasu wykonywania mogące wystąpić w programie: operacje arytmetyczne (np. dzielenie przez zero); operacje wejścia / wyjścia (brak pliku, brak połączenia sieciowego); błędy adresowania pamięci (przekroczenie zakresu tablicy, nieistniejący obiekt).
3
Zdarzeniowy model aplikacji 3 System Windows bazuję na komunikatach, które zarządzają stanem aplikacji. Komunikaty informują aplikacje o tym co się dzieje w systemie. - komunikaty poleceń (ang. command messages) - wysyłane w celu wykonania jakiejś czynności -komunikaty powiadomień (ang. notification messages) - dla powiadomienia aplikacji lub systemu o wystąpieniu zdarzenia. Komunikaty przetwarzane są w kolejce 1. wystąpienie zdarzenia - system umieszcza je w kolejce komunikatów, 2. process pobiera komunikat z kolejki 3. komunikat jest wysyłany pod adresem okna docelowego, 4. jeżeli w procedurze okna, uwzględniono jego obsługę, jest ona wywoływana, w przeciwnym wypadku obsługa w sposób domyślny
4
Komunikaty okna: WM_CREATE -Procedura obsługi okna otrzymuje ten komunikat podczas wykonywania przez system operacyjny funkcji CreateWindow. WM_PAINT -Większość programów pracujących pod kontrolą systemu Windows wywołuje funkcję UpdateWindow podczas inicjalizacji w funkcji WinMain zaraz przed uruchomieniem pętli komunikatów. W ten sposób system wysyła do procedury okna pierwszy komunikat WM_PAINT, który informuje procedurę okna o konieczności wypełnienia obszaru klienta. Następnie procedura okna otrzymuje komunikat WM_PAINT zawsze wtedy, gdy ma miejsce jedno z następujących zdarzeń: - wcześniej zasłonięty obszar okna jest odsłaniany w wyniku zmiany pozycji innego okna przez użytkownika; - użytkownik zmienia rozmiar okna (jeżeli styl klasy okna posiada flagi CS_HREDRAW i CS_VREDRAW); - program wykorzystuje funkcje ScrollWindow lub ScrollDC do przewinięcia części jego obszaru klienckiego; - program używa funkcji InvalidateRect lub InvalidateRgn do jawnego wygenerowania komunikatu WM_PAINT. WM_DESTROY -Komunikat informujący o tym, że system rozpoczął proces niszczenia okna na żądanie użytkownika. Komunikaty niekolejkowane Komunikaty kolejkowane 4
5
WM_KEYDOWN -Komunikaty wysyłane do okna podczas wciskania lub zwalniania WM_KEYUPniesystemowego przycisku klawiatury. Parametry: -wParam określa kod jego wirtualnego przycisku. WM_COMMAND -Komunikat wysyłany gdy użytkownik wybiera polecenie menu lub gdy kontrolka wysyła komunikat do okna nadrzędnego. Parametry: -wParam (high-word) ma wartość 0 dla poleceń menu, a w przypadku kontrolki, specyficzny dla niej kod powiadomienia; - wParam (low-word) określa identyfikator pola menu lub kontrolki; -lParam ma wartość 0 dla poleceń menu lub określa uchwyt okna kontrolki. WM_LBUTTONDOWN -Komunikaty wysyłane gdy użytkownik wciska (zwalnia) lewy (prawy) przycisk WM_LBUTTONUPmyszy podczas, gdy kursor znajduje się w obszarze klienckim okna. Parametry: WM_RBUTTONDOWN-wParam określa jakie wirtualne przyciski są wciśnięte: WM_RBUTTONUPMK_CONTROL – przycisk CTRL, MK_LBUTTON – lewy przycisk myszy, MK_MBUTTON – środkowy przycisk myszy, MK_RBUTTON – prawy przycisk myszy, MK_SHIFT – przycisk SHIFT; - lParam (low-word) określa współrzędną x kursora; - lParam (high-word) określa współrzędną y kursora. WM_MOUSEMOVE -Komunikat wysyłany do okna podczas ruchu kursora. Parametry komunikatu są identyczne jak w przypadku wciskania i zwalniania przycisków myszy. 5
6
Budowa aplikacji Windows 6 Aplikacja Windows działa w następujących fazach: Tworzymy tzw klasę okna, definiujemy jego wygląd wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } Tworzymy w pamięci instancję okna hwnd = CreateWindow (szAppName, TEXT ("The Hello Program"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ;
7
Budowa aplikacji Windows 7 Uruchamiamy nieskończoną pętlę przetwarzania komunikatów while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } Funkcja DispatchMessage uruchamia tzw funkcję okna, w której możemy obsłużyć komunikaty LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_LBUTTONDOWN : MessageBox(hwnd, “Zostal wcisniety lewy przycisk myszy…", „Informacja", MB_ICONINFORMATION | MB_OK); return 0; case WM_CLOSE: if (IDCANCEL == MessageBox(hwnd, „Czy chcesz zamknac program?", „Pytanie", MB_ICONQUESTION | MB_OKCANCEL)) return 0; else break; case WM_DESTROY : PostQuitMessage(0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); } Komunikaty obsłużone przez użytkownika nie powinny trafić do domyślnej procedury okna ‘DefWindowProc’. W tym celu po obsłużeniu komunikatu należy wyjść z procedury zwracając wartość zero. Wszystkie komunikaty, których nie obsłużył użytkownik, trafiają do domyślnej procedury okna ‘DefWindowProc’.
8
Program WINAPI Funkcja WinMain Procedura obsługi okna 1 Procedura obsługi okna 2 System operacyjny Kolejka komunikatów Definiowanie klas okien programu Rejestracja zdefiniowanych klas Utworzenie okna głównego Wyświetlenie okna głównego Obsługa komunikatów okna 1 Obsługa komunikatów okna 2 Pobranie komunikatu Przekazanie komunikatu Pętla komunikatów Reakcja systemu na zdarzenie HWND WM_COMMAND LPARAM WPARAM HWND WM_CLOSE 0 0 HWND WM_DESTROY 0 0 HWND WM_QUIT 0 0
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.