350 likes | 566 Views
Wykład 1. Programowanie w Windows. Programowanie zdarzeniowe AppWizard Aplikacja dialogowa (Dialog based). PO01-1 / 40. Program proceduralny i zdarzeniowy. Program proceduralny wykonuje kolejne funkcje krok po kroku.
E N D
Wykład 1 Programowanie w Windows • Programowanie zdarzeniowe • AppWizard • Aplikacja dialogowa (Dialog based) PO01-1 / 40
Program proceduralny i zdarzeniowy Program proceduralny wykonuje kolejne funkcje krok po kroku. Jeśli czeka na zdarzenie, to na zdarzenie ściśle określone w danym momencie (wprowadzenie danych, wybór opcji menu, naciśnięcie klawisza itp.). Program zdarzeniowy wykonuje funkcje w odpowiedzi na zdarzenia. Czeka na dowolne zdarzenie przewidziane do obsługi. PO01-2 / 40
Program proceduralny Przykład Start Zdefiniuj początkowe obiekty i zainicjuj je Czekaj na zdarzenie (np. na wprowadzenie danych) Przetwarzaj dane Czekaj na zdarzenie (np. na zapisanie wyników) Zamknij aplikację Stop PO01-3 / 40
Program zdarzeniowy Start Zdefiniuj początkowe obiekty i zainicjuj je Czekaj na zdarzenie Czy zamknąć aplikację? Nie Tak Wykonaj funkcję obsługi zdarzenia Wykonaj funkcję obsługi zdarzenia i zamknij aplikację Stop PO01-4 / 40
Obsługa zdarzenia Przekaż obsługę zdarzenia do aplikacji Czy aplikacja obsłuży je? Nie Tak Przekaż obsługę zdarzenia do Windowsa Wykonaj funkcję obsługi zdarzenia PO01-5 / 40
AppWizard • Tworzenie projektu MFC AppWizard • Programowanie interfejsu • Kontrolki i ich klasy • Komunikaty generowane przez kontrolki PO01-11 / 40
Projekt MFC AppWizard Interfejs oraz szkielet programu generowany przez AppWizard Funkcje obsługi zdarzeń Użytkownik Zasoby programu Dialog Based Single Document MFC = Microsoft Foundation Class Multiple Documents PO01-12 / 40
Tworzenie projektu PO01-13 / 40
Tworzenie projektu (2) PO01-14 / 40
Tworzenie projektu (3) PO01-15 / 40
Tworzenie projektu (4) PO01-16 / 40
Programowanie interfejsu PO01-17 / 40
Wybrane klasy MFC MFC = Microsoft Foundation Class CObject CCmdTarget CWnd CButton CEdit CListBox CStatic CScrollBar COleControl CTabCtrl CAnimateCtrl CComboBox CSliderCtrl CProgressCtrl CMonathCalCtrl CDateTimeCtrl PO01-18 / 40
Zestaw kontrolek PO01-19 / 40
Wybór Ilustracja Statyczne pole tekstowe Pole edycji xyz Przycisk Grupa obiektów Przełącznik opcji Pole wyboru Pole listy Lista rozwijana Pasek przewijania poziomego Pasek przewijania pionowego Przewijanie pionowe listy Wskaźnik postępu Suwak „Gorący” klawisz Okno listy szczegółowej Drzewo Element animowany Karty Pole tekstu formatowanego Próbnik daty i godziny Kalendarz Pole adresu IP Kontrolka użytkownika Rozszerzone okno listy rozwijanej Zestaw kontrolek PO01-20 / 40
CStatic CEdit xyz CButton CButton CButton CComboBox CListBox CScrollBar CScrollBar CSpinPuttonCtrl CProgressCtrl CSliderCtrl CHotKeyCtrl CListCtrl CTreeCtrl CTabCtrl CAnimateCtrl CRichEditCtrl CDateTimeCtrl CMonthCalCtrl CIPAddressCtrl COleControl CComboBoxEx Klasy kontrolek PO01-21 / 40
xyz Generowane komunikaty EN_CHANGE, EN_KILLFOCUS, EN_SETFOCUS, EN_ERRSPACE, EN_HSCROLL, EN_VSCROLL, EN_MAXTEXT BN_CLICKED, BN_DOUBLECLICKED BN_CLICKED, BN_DOUBLECLICKED CBN_CLOSEUP, CBN_DROPDOWN, CBN_DBLCLK, CBN_EDITCHANGE, CBN_EDITUPDATE, CBN_ERRSPACE, CBN_KILLFOCUS, CBN_SETFOCUS, CBN_SELCHANGE, CBN_SELENDOK, CBN_SELNDCANCEL BN_CLICKED, BN_DOUBLECLICKED LBN_DBLCLICK, LBN_KILLFOCUS, LBN_SETFOCUS, LBN_SELCANCEL, LBN_ERRSPACE, LBN_SELCHANGE NM_OUTOFMEMORY NM_OUTOFMEMORY, UDN_DELTAPOS NM_OUTOFMEMORY, NM_CUSTODRAW, NM_RELEASEDCAPTURE NM_OUTOFMEMORY NM_CLICK, NM_DBLCLK, NM_KILLFOCUS, NM_RETURN, . . . NM_CLICK, NM_DBLCLK, NM_KILLFOCUS, NM_RETURN, . . . NM_CLICK, TCN_SELCHANGE, NM_RCLICK, TCN_KEYDOWN . . . NM_OUTOFMEMORY DTN_CLOSEUP, DTN_DROPDOWN, ... NM_KILLFOCUS, NM_RETURN, . . . NM_CLICK, NM_DBLCLK, NM_KILLFOCUS, NM_RCLICK, . . . IPN_FIELDCHANGED MCN_GETDAYSTATE, MCN_SELECT, MCN_SELCHANGE, MCN_RELEASECAPTURE, . . . CBN_EDITCHANGE, CBN_CLOSEUP, CBN_DBLCLK, CBN_KILLFOCUS, . . . PO01-22 / 40
Kontekstowe menu kontrolki PO01-23 / 40
Okno komunikatów Lista komunikatów kontrolki „Edit Box”, którym nie zdefiniowano funkcji obsługi Lista komunikatów kontrolki „Edit Box”, którym zdefiniowano funkcje obsługi Opis zdarzenia generującego podświetlony komunikat PO01-24 / 40
Aplikacja dialogowa • Propozycja aplikacji • Projektowanie interfejsu • Pokazanie okna „About” • Zmienne dla kontrolek • Obsługa przycisków PO01-25 / 40
Propozycja aplikacji PO01-26 / 40
Projekt interfejsu PO01-27 / 40
Okna właściwości PO01-28 / 40
Interface PO01-29 / 40
Obsługa przycisku „About” • Wybierając „Events...” w kontekstowym menu przycisku„About” otwieramy okno dodawania nowych handlerów. • Do obiektu IDC_BUTTON4 dodajemy funkcję obsługikomunikatu BN_CLICKED. • Akceptujemy nazwę funkcji „OnButtom4”. • Edytujemy funkcję wpisując do niej kod w języku C++. PO01-30 / 40
Programowanie obsługi „About” PO01-31 / 40
Działanie programu PO01-32 / 40
xyz Zmienne kontrolek CString, int, UINT, long, DWORD, float,double, BYTE short, BOOL, COleDateTime, COleCirrency CStatic CButton BOOL int CString CString int int CSpinPuttonCtrl CProgressCtrl int CHotKeyCtrl CListCtrl CTreeCtrl CTabCtrl CAnimateCtrl CString, int, UINT, long, DWORD, float,double, BYTE short, BOOL, COleDateTime, COleCirrency Ctime, COleDateTime Ctime, COleDateTime CIPAddressCtrl Cstring, int PO01-33 / 40
MFC ClassWizard PO01-34 / 40
Obsługa zdarzeń Obsługa przycisków „Dodaj”, „Podziel” i „Wynik -> X” jest bardzo podobna. Do klasy okna dialogowego „CWyklad12Dlg” dodamy funkcję „Oblicz(int)” realizującą algorytm: • Przenieś dane z kontrolek do ich zmiennych. • Wykonaj zadane działania (Wynik=X+Y, Wynik=X/Y lub X=Wynik) • Przenieś dane ze zmiennych do ich kontrolek. PO01-35 / 40
Dopisanie funkcji PO01-36 / 40
Obsługa przycisków PO01-37 / 40
Obsługa przycisków PO01-38 / 40
Program PO01-39 / 40
Dezaktywacja klawisza PO01-40 / 40