Wykład 1
Programowanie w Windows
1. Programowanie zdarzeniowe 2. AppWizard
3. Aplikacja dialogowa (Dialog based)
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
Zdefiniuj początkowe obiekty i zainicjuj je Start
Czekaj na zdarzenie (np. na wprowadzenie danych) Przykład
Przetwarzaj dane
Czekaj na zdarzenie (np. na zapisanie wyników) Zamknij aplikację
Program zdarzeniowy
Zdefiniuj początkowe obiekty i zainicjuj je Start
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
Wykonaj funkcję obsługi zdarzenia Przekaż obsługę zdarzenia
do Windowsa
AppWizard
1. Tworzenie projektu MFC AppWizard 2. Programowanie interfejsu
3. Kontrolki i ich klasy
4. Komunikaty generowane przez kontrolki
PO01-11 / 40
Projekt MFC AppWizard
Interfejs oraz szkielet
programu generowany
przez AppWizard
Funkcje obsługi zdarzeń
Zasoby programu Użytkownik
Dialog Based Single Document
Tworzenie projektu
PO01-13 / 40
Tworzenie projektu (2)
Tworzenie projektu (3)
PO01-15 / 40
Tworzenie projektu (4)
Programowanie interfejsu
PO01-17 / 40
Wybrane klasy MFC
CWnd CObject CCmdTarget
CButton
COleControl CAnimateCtrl
CEdit
CComboBox CProgressCtrl
CListBox CScrollBar
CStatic
CMonathCalCtrl
CSliderCtrl
CDateTimeCtrl CTabCtrl
MFC = Microsoft Foundation Class
Zestaw kontrolek
PO01-19 / 40
Zestaw kontrolek
Con...
Aa ab|
xyz
Wybór Statyczne pole tekstowe Grupa obiektów Pole wyboru Lista rozwijana Pasek przewijania poziomego Przewijanie pionowe listy Suwak Okno listy szczegółowej Karty Pole tekstu formatowanego
Pasek przewijania pionowego Wskaźnik postępu
„Gorący” klawisz Drzewo
Element animowany Próbnik daty i godziny Pole listy
Przełącznik opcji Przycisk
Pole edycji Ilustracja
Klasy kontrolek
Con...
Aa ab|
ab
xyz
CStatic CButton CComboBox CScrollBar CSpinPuttonCtrl CSliderCtrl CListCtrl CTabCtrl CRichEditCtrl CMonthCalCtrl COleControl
CScrollBar CProgressCtrl CHotKeyCtrl CTreeCtrl CAnimateCtrl CDateTimeCtrl CIPAddressCtrl CComboBoxEx CListBox
CButton CButton CEdit
PO01-21 / 40
Generowane komunikaty
Con...
Aa ab|
xyz
BN_CLICKED, BN_DOUBLECLICKED EN_CHANGE, EN_KILLFOCUS, EN_SETFOCUS, EN_ERRSPACE, EN_HSCROLL, EN_VSCROLL, EN_MAXTEXT
BN_CLICKED, BN_DOUBLECLICKED BN_CLICKED,
BN_DOUBLECLICKED
LBN_DBLCLICK, LBN_KILLFOCUS, LBN_SETFOCUS, LBN_SELCANCEL, LBN_ERRSPACE, LBN_SELCHANGE
CBN_CLOSEUP, CBN_DROPDOWN, CBN_DBLCLK, CBN_EDITCHANGE, CBN_EDITUPDATE, CBN_ERRSPACE, CBN_KILLFOCUS, CBN_SETFOCUS, CBN_SELCHANGE, CBN_SELENDOK, CBN_SELNDCANCEL
NM_OUTOFMEMORY, UDN_DELTAPOS NM_OUTOFMEMORY NM_OUTOFMEMORY
NM_OUTOFMEMORY
NM_OUTOFMEMORY, NM_CUSTODRAW, NM_RELEASEDCAPTURE NM_CLICK, NM_DBLCLK,
NM_KILLFOCUS, NM_RETURN, . . . NM_CLICK, TCN_SELCHANGE, NM_RCLICK, TCN_KEYDOWN . . .
NM_CLICK, NM_DBLCLK, DTN_CLOSEUP, DTN_DROPDOWN, ...
NM_KILLFOCUS, NM_RETURN, . . . NM_CLICK, NM_DBLCLK,
NM_KILLFOCUS, NM_RETURN, . . .
Kontekstowe menu kontrolki
CutCopy
PastInsert ActiveX Control...
Size to Content Align Left Edges Align Top Edges Check Mnemonics ClassWizard...
Events...
Properties
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
Aplikacja dialogowa
1. Propozycja aplikacji
2. Projektowanie interfejsu 3. Pokazanie okna „About”
4. Zmienne dla kontrolek 5. Obsługa przycisków
PO01-25 / 40
Propozycja aplikacji
Projekt interfejsu
PO01-27 / 40
Okna właściwości
Interface
PO01-29 / 40
Obsługa przycisku „About”
1. Wybierając „Events...” w kontekstowym menu przycisku
„About” otwieramy okno dodawania nowych handlerów.
2. Do obiektu IDC_BUTTON4 dodajemy funkcję obsługi komunikatu BN_CLICKED.
3. Akceptujemy nazwę funkcji „OnButtom4”.
4. Edytujemy funkcję wpisując do niej kod w języku C++.
Programowanie obsługi „About”
PO01-31 / 40
Działanie programu
Zmienne kontrolek
Con...
Aa ab|
ab
xyz
CStatic BOOL CString int CSpinPuttonCtrl int CListCtrl CTabCtrl Ctime, COleDateTime
int
CProgressCtrl CHotKeyCtrl CTreeCtrl CAnimateCtrl
Ctime, COleDateTime CIPAddressCtrl
Cstring, int CString int
CButton
CString, int, UINT, long, DWORD, float,double, BYTE short, BOOL, COleDateTime, COleCirrency
CString, int, UINT, long, DWORD, float,double, BYTE short, BOOL, COleDateTime, COleCirrency
PO01-33 / 40
MFC ClassWizard
CutCopy
PastInsert ActiveX Control...
Size to Content Align Left Edges Align Top Edges Check Mnemonics ClassWizard...
Events...
Obsługa zdarzeń
1. Przenieś dane z kontrolek do ich zmiennych.
2. Wykonaj zadane działania (Wynik=X+Y, Wynik=X/Y lub X=Wynik)
3. Przenieś dane ze zmiennych do ich kontrolek.
Obsługa przycisków „Dodaj”, „Podziel” i „Wynik -> X”
jest bardzo podobna. Do klasy okna dialogowego
„CWyklad12Dlg” dodamy funkcję „Oblicz(int)” realizującą algorytm:
PO01-35 / 40
Dopisanie funkcji
Go to Definition Go to Dialog Editor Add Member Function...
Add Member Variable...
Add Virtual Function...
Add Windows Message Handler...
Obsługa przycisków
CutCopy
PastInsert ActiveX Control...
Size to Content Align Left Edges Align Top Edges Check Mnemonics ClassWizard...
Events...
Properties
PO01-37 / 40
Obsługa przycisków
Program
PO01-39 / 40