microsoft visual c++

26
Microsoft Visual C++

Upload: phiala

Post on 12-Jan-2016

73 views

Category:

Documents


0 download

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

TRANSCRIPT

Page 1: Microsoft Visual C++

Microsoft Visual C++

Page 2: Microsoft Visual C++

Typy aplikacji – okna dialogowe

Page 3: Microsoft Visual C++

Typy aplikacji – Multiple Document

Page 4: Microsoft Visual C++

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

Page 5: Microsoft Visual C++

Komunikacja w Windows komunikaty cd.

• Komunikaty przycisku– BN_CLICKED, BN_DOUBLECLICKED,

BN_SETFOCUS

• Komunikaty listy:– LBN_SELCHANGE, LBN_DBCLICK

• Komunikaty Timera:– WM_TIMER

Page 6: Microsoft Visual C++

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

Page 7: Microsoft Visual C++

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)

Page 8: Microsoft Visual C++

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

Page 9: Microsoft Visual C++

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

Page 10: Microsoft Visual C++

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

Page 11: Microsoft Visual C++

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);

Page 12: Microsoft Visual C++

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”);

Page 13: Microsoft Visual C++

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

Page 14: Microsoft Visual C++

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();

Page 15: Microsoft Visual C++

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.

Page 16: Microsoft Visual C++

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

Page 17: Microsoft Visual C++

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]

Page 18: Microsoft Visual C++

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….

}

Page 19: Microsoft Visual C++

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

Page 20: Microsoft Visual C++

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)

Page 21: Microsoft Visual C++

Pożyteczne funkcje

• Operaceje na plikach:– CreateFile //stworzenie otwarcie pliku

(również portu RS232)– CloseHandle //zamknięcie pliku– ReadFile– WriteFile

Page 22: Microsoft Visual C++

Pożyteczne funkcje

• Konwersja

• atoi //char[]->int

• atof //char[]->float

• itoa //int ->char[]

• ftoa //float -> char[];

Page 23: Microsoft Visual C++

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

Page 24: Microsoft Visual C++

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

Page 25: Microsoft Visual C++

Tematy 3

• Wyścigi samochodowe (sieć)

• Karty np. makao etc. (cała grupa) ok. 5 różnych gier

• Gra planszowa (np. Monopol)(sieć)

Page 26: Microsoft Visual C++

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.