Upload
phiala
View
73
Download
0
Embed Size (px)
DESCRIPTION
Microsoft Visual C++. Typy aplikacji – okna dialogowe. Typy aplikacji – Multiple Document. Komunikacja w Windows komunikaty. Komunikaty okna: WM_CREATE, WM_INIT, WM_WM_CLOSE, WM_KILLFOCUS, WM_ACTIVATE, WM_MOVE Komunikaty myszy: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONCLIC, - PowerPoint PPT Presentation
Citation preview
Microsoft Visual C++
Typy aplikacji – okna dialogowe
Typy aplikacji – Multiple Document
Komunikacja w Windows komunikaty
• Komunikaty okna:– WM_CREATE, WM_INIT, WM_WM_CLOSE,– WM_KILLFOCUS, WM_ACTIVATE, WM_MOVE
• Komunikaty myszy:– WM_LBUTTONDOWN, WM_LBUTTONUP,
WM_LBUTTONCLIC, – WM_MOUSEMOVE, WM_MOUSEWHEEL
• Komunikaty klawiatury:– WM_KEYDOWN, WM_KEYUP, WM_CHAR
Komunikacja w Windows komunikaty cd.
• Komunikaty przycisku– BN_CLICKED, BN_DOUBLECLICKED,
BN_SETFOCUS
• Komunikaty listy:– LBN_SELCHANGE, LBN_DBCLICK
• Komunikaty Timera:– WM_TIMER
Elementy składowe okna
• Projekt okna dialogowego (interface’u) jest odsprzęgnięty od obiektów i klas aplikacji.
• Każdy element okna opisywany jest przez szereg cech – właściwości:– ID -identyfikator komponentu (Etykieta,
której przypisana jest liczba)– Caption – napis widoczny na ekranie (o ile
komponent na to pozwala
Zmienne skojarzone (member variable)
• Każda aplikacja ma szereg klas. Część z nich są skojarzone z oknami dialogowymi, dokumentami, widokami i aplikacją.
• Każde okno dialogowe ma skojarzoną z nim klasę pochodzącą od klasy CDialog
• Każdy widok dokumentu ma skojarzoną z nim klasę pochodzącą od CView
• Wewnątrz tych klas mogą znajdować się deklarację atrybutów (zmiennych, które są skojarzone z elementami okna)
Zmienne skojarzone cd.
• Wyróżnia się 2 typy zmiennych skojarzonych z komponentami okna
• Control – pozwalające na sterowanie elementem okna (ukrywanie, zmianę ustawień, oraz dostęp do wartości)
• Value – zmienna przechowująca wartość danego elementu
Synchronizacja zmiennych skojarzonych
• Okno jest w pewien sposób odsprzęgnięte od obsługującej go klasy.
• Stan zmiennych skojarzonych jest synchronizowany z zawartością okna w metodzie DoDataExchange
• Metoda ta wywoływana jest pośrednio przez metodę: – UpdateData(true);// gdy należy ukatualnić wartości
zmiennych na podstawie wartości w oknie dialogowym
– UpdateData(false); //gdy należy uaktualnić zawartość okna dialogowego na podstawie wartości zmiennych
Klasa kontrolująca stan listy
• Do obsługi listy służy klasa CListBox• Obiekt (m_lista) klasy CListBox ma następujące
metody:– int idx=m_lista.AddString(„napis”); //dodaje napis,
zwraca pozycję na liście– m_lista.DeleteString(n); //usuwa napis nr n z listy– idx=m_lista.GetCurSel(); //Zwraca nr aktualnie
podswietlonego napisu– int MAX=m_lista.Count(); //zwraca ilosc elementow
na liscie
Inne klasy MFC
• Klasa do obsługi łańcuchów tekstowychCString napis;napis=„tekst”;
• Klasa punktuCPoint – przechowuje pozycję:CPoint a(3,5); //punkt x=3, y=5a.x=6; //punkt x=6, y=5
• BitampaCBitmap bt;bt.LoadBitmap(„Nazwa”);bt.LoadBitmap(ID_ZASOBOW);
Rysowanie – kontekst okna
• Kontekst jest obiektem, który umożliwia rysowanie i wyświetlanie w obszarze okna, które zostało z nim skojarzone.
• Stworzenie kontekstu (wewnątrz klasy pochodzącej od CView lub CDialog:
CClientDC kontekst(this);
Metody klasy CClientDC:Kontekst.MoveTo(x,y);Kontekst.LineTo(x,y);Kontekst.TextOut(x,y,”napis”);
Konteksty pamięciowe• Są wykorzystywane w celu przygotowania rysunku w pamięci, a następnie można go
wyświetlić w pewnym oknie w zadanej lokalizacjijeśli zdefiniowane jest pole klasy:
CBitmap Buffor;
to można wykonać następujące operacje:CClientDC Kontekst(this); //tworzy kontekst oknaCDC MemDC; //obiekt kontekstu pamięciowegoBuffor.CreateCompatibileBitmap(&Kontekst,szerokosc,wysokosc); //tworzy bitmape
o rozdzielczosci i ustawieniach takich jak kontekst oknaMemDC.CreateCompatibileDC(&Kontekst); //Tworzy kontekst pamięciowy
kompatybilny kontekstem oknaMemDC.SelectObject(&Buffor); //powiązanie bufora z kontekstem pamięciowymMemDC.LineTo(10,10); //rysowanie w kontekście pamięciowym;
Kontekst.StretchBlt(poz_x,poz_y,szer,wys,&MemDC,poz_x_źr, poz_y_źr,szer_x_źr, szer_y_źr,SRCCOPY); //wyświetla kontekst pamięciowy na ekranie
Przerysowywanie okien
• Każde okno gdy jest ukryte, przysłonięte, lub gdy zmienia się jego rozmiar, wymaga przerysowania.
• Wszystkie obiekty widoczne w oknie muszą być rysowane w metodzie:– OnPaint (gdy okno pochodzi z klasy CDialog)– OnDraw (gdy okno pochodzi z klasy CView)
• Przerysowanie okna może być wymuszone przez wywołanie metody:
Invalidate();
Komendy (menu, przyciski, skróty)
• Każda komenda w aplikacji może być wowyłwana z:– menu– tzw. toolbox’u– za pomocą skrótu klawiszowego (accelerator)
• W Visual C z dla kadej komendy tworzy się odpowiedni identyfikator (np. przez dodanie pozycji menu, a następnie ten sam identyfikator przypisuje się ikonce (toolbar) lub klawiszowi skrótu (accelerator)
• Po wybraniu odpowiedniej pozycji z menu generowany jest komunikat (message)
• Obsługa takiego komunikatu może znajdować się w dowolnej klasie aplikacji.
Wyświetlanie komunikatów
• Dla MFC dowyświetlania okien komunikatów o błędach, ostrzeżeń i pytań wykorzystuje się funkcięint wynik=AfxMessageBox(„komunikat”,typ,0);
gdzie typ określa typ okna:– MB_ABORTRETRYIGNORE – MB_OK– MB_OKCANCEL– MB_RETRYCANCEL– MB_YESNO – MB_YESNOCANCEL
Wynik jest zależny od typu wciśniętego przycisku
Praca równoczesna - Timer
• Inicjacja:
SetTimer(nr,T,NULL);
//nr – numer Timera 0-65535, T – czas w [ms]//Musi być wykonana po stworzeniu okna dialogowego lub widoku (powinna się
znajdować bądź w metodzie OnInitialUpdate, lub OnInitDialog)
• Należy skojarzyć komunikat WM_TIMER z odpowiednią funkcją która będzie wywoływana cyklicznie co T [ms]
Praca równoczesna - wątki
• Watek jest pewną częścią programu, która wykonywana jest równocześnie (współbieżnie) z programem głównym.
• Funkcja wątku (działa analogicznie jak funkcja main programu głównego ma następującą definicję:
UINT FunkcjaWatku(LPVOID dane)
{
//kod watku….
}
Wątki cd…
• Gdzie argument dane są typu void*, (dowolny wskaźnik)
• Kod uaktywniający wątek:
CWinThread *watek;
watek = AfxBeginThread( FunkcjaWatku,
(LPVOID)&dane));gdzie drugi argument jest w wskaźnikiem do dowolnej
zmiennej lub obiektu
Metody CWinThread
• watek->SuspendThread(); //zatrzymuje (usypia) wątek;
• watek->ResumeThread(); //Aktywuje wątek z uśpienia
• watek->AfxEndThread(ExitCode); //wymusza zakończenie wątku z kodem (ExitCode)
Pożyteczne funkcje
• Operaceje na plikach:– CreateFile //stworzenie otwarcie pliku
(również portu RS232)– CloseHandle //zamknięcie pliku– ReadFile– WriteFile
Pożyteczne funkcje
• Konwersja
• atoi //char[]->int
• atof //char[]->float
• itoa //int ->char[]
• ftoa //float -> char[];
Tematy projektów
• Aplikacja do dystrybucji informacji wewnątrz grupy osób
• Karta dźwiękowa jako oscyloskop• Aplikacja do wizualizacji i komunikacji z
oscyloskopem i multimetrem (za pomocą łącza RS232) + moduł do przesyłąnia danych przez sieć
• Aplikacja do wizualizacji pulpitu na innych komputerach
Tematy projektów 2
• Aplikacja do zaawansowanego wyświetlania i przetwarzania danych pomiarowych (prezentacja wykresów, wydruki+komunikacja z excelem i wordem (DDE))
• Organizer dla wielu użytkowników, z możliwością wysyłania powiadomień na maila
Tematy 3
• Wyścigi samochodowe (sieć)
• Karty np. makao etc. (cała grupa) ok. 5 różnych gier
• Gra planszowa (np. Monopol)(sieć)
Fazy projektowania
• Zawiązanie się grupy i wybór lidera• Słowny opis reguł i elementów aplikacji
– Z opisu należy wyodrębnić rzeczowniki (na ich bazie stworzyć listę potrzebnych obiektów)
– Z opisu wyodrębnić przymiotniki i czasowniki i przypisać je do konkretnych obiektów jako ich metody
– Dokonać szkiców elementów graficznych: plansz, okien itp.
• Po raz drugi dokonać przeglądu obiektów pod katem ich funkcji, (co będą robić, jak mają wyglądać) na podstawie tej analizy poszerzyć listę metod i właściwości.
• Stworzyć nagłówki klas i podzielić zadania• Zaimplementować poszczególne metody.