Wykład 11 Aplikacje SDI PO11-1 / 22 Single Document Interface 1.Klasy aplikacji SDI 2.Menu systemowe aplikacji SDI 3.Serializacja 4.Tworzenie widoku 5.Tworzenie.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Jarosław Kuchta Monitory.
Dzisiejszy wykład Wyjątki.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
Klasy i obiekty.
Bezpieczeństwo wyjątków w C++: OpenGL
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Szablony (wzorce) Przykład 1: Szablon klasy -
OOPC++ - wstêp, klasy1 Klasy Do struktury można dołączyć operacje działające na jej polach. struct date { int day, month, year; void set (int d, int m,
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
DZIEDZICZENIE · klasy bazowe i klasy pochodne WyświetlAutora( ) Autor
Obiektowe metody projektowania systemów Command Pattern.
Programowanie w środowiskach zintegrowanych wykład 1 PSZ Programowanie w Środowiskach Zintegrowanych > Systemy i środowiska zintegrowane > Środowisko zintegrowane.
C++ wykład 2 ( ) Klasy i obiekty.
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
Język Java Wielowątkowość.
Visual C++ Zastosowania Informatyki Wykład 6 Copyright, 2003 © Adam Czajka.
C# Windows Forms Zastosowania Informatyki Wykład 3
Test Doubles Adam Gabryś , v1.1,
Podstawy C# Grupa .NET PO.
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Programowanie obiektowe III rok EiT
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Podstawy programowania II
Podstawy programowania II
Podstawy inżynierii oprogramowania Zofia Kruczkiewicz
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
Programowanie obiektowe w C++
Tworzenie aplikacji mobilnych
Programowanie obiektowe III rok EiT
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT
Seminarium problemowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
  ELEMENTY JĘZYKA JAVA komentarze w Javie, słowa kluczowe i operatory, proste typy danych, tablice, podstawowy zestaw instrukcji.
OCPJP Inner classes.
Dobry kod OO Jeżeli zapytamy statystycznego programistę z czym kojarzy mu się dobry kod OO to najprawdopodobniej będzie mówił o wzorcach projektowych.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Języki formalne Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Obiektowe metody projektowania systemów Adapter. Wstęp: „Dostosowanie interfejsu klasy do interfejsu, którego oczekuje użytkownik. Adapter umożliwia współprace.
Paweł Starzyk Obiektowe metody projektowania systemów
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
Wykład 4 Klasa Vec, której konstruktory alokują pamięć dla obiektów 1.Przykład definicji klasy Vec 2.Definicje konstruktorów i destruktora 3.Definicja.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Wykład 10 Programowanie w Windows 1.Aplikacja dialogowa (Dialog Based) PO10-1 / 26.
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
Wykład 5 Klasa Vec i jej operatory 1.Kategorie operatorów 2.Operatory ogólne - przykłady 3.Operatory specjalne [ ], ( ) oraz –> 4.Operatory new i delete.
Wykład 8 Polimorfizm 1.Funkcje polimorficzne 2.Czyste funkcje wirtualne i klasy abstrakcyjne PO8-1 / 38.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Podstawy informatyki Operatory rzutowania Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały.
Programowanie Obiektowe – Wykład 6
(według:
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Aplikacje i usługi internetowe
Zdarzenia (eventy) Zdarzenia służą do powiadomienia użytkownika, gdy w używanej klasie dojdzie do pewnych wydarzeń zdefiniowanych przez twórcę klasy.
Python 3 Wprowadzenie.
Zapis prezentacji:

Wykład 11 Aplikacje SDI PO11-1 / 22 Single Document Interface 1.Klasy aplikacji SDI 2.Menu systemowe aplikacji SDI 3.Serializacja 4.Tworzenie widoku 5.Tworzenie wydruku

Aplikacje SDI Single Document Interface 1.Klasy aplikacji SDI 2.Menu systemowe aplikacji SDI 3.Serializacja 4.Tworzenie widoku 5.Tworzenie wydruku PO11-2 / 22

Koncepcja SDI Interfejs użytkownika (klasa widoku) Dane i ich przetwarzanie (klasa dokumentu) Użytkownik Dyski i inne urządzenia magazynujące dane Drukarki i inne urządzenia prezentujące dane PO11-3 / 22

Klasy aplikacji SDI CObiect CCmdTarget CDocTemplateCWinAppCDocumentCWnd CViewCFrameWndCDialogCSingleDocTemplate CXxxViewCMainFrameCAboutDlgCXxxDocCXxxApp Klasy aplikacji xxx PO11-4 / 22

Elementy aplikacji CMainFrame CxxxView CStatusBar CToolbar Okno widoku PO11-5 / 22

Menu aplikacji SDI PO11-6 / 22

Menu aplikacji SDI FileEditViewHelp ↓ ↓ ↓ ↓ New Ctrl+NUndo Ctrl+ZToolbarAbout xxx... Open... Ctrl+OCut Ctrl+XStatus Bar Save Ctrl+SCopy Ctrl+C Save As...Past Ctrl+V Print... Ctrl+P Print Preview Print Setup... Recent File Exit PO11-7 / 22

Właściwości komendy Podkreślenie PO11-8 / 22

Właściwości separatora PO11-9 / 22

Właściwości podmenu PO11-10 / 22

Programowanie komendy PO11-11 / 22

Zmiana komendy PO11-12 / 22

Przykład Aktywacja komendy „Podziel” w podmenu „Oblicz” void CMainFrame::OnObliczPodziel( ) { m_C = m_A / m_B; } void CMainFrame::OnUpdateObliczPodziel(CCmdUI* pCmdUI) { pCmdUI->Enable( m_B != 0 );// aktywuj gdy B  0 } PO11-13 / 22

Funkcje obsługi dokumentu BOOL OnNewDocument(); BOOL OnOpenDocument( LPCTSTR pPath ); BOOL OnSaveDocument( LPCTSTR pPath ); void OnCloseDocument(); void DeleteContents(); BOOL CxxxDoc::OnNewDocument( ) { if(!CDocument::OnNewDocument( )) return FALSE; // Tu instrukcje inicjujące nowy dokument // zwykle po starcie aplikacji lub po wybraniu „New” return TRUE; } BOOL CxxxDoc::OnOpenDocument(LPCTSTR pPath) { if(!CDocument::OnOpenDocument(LPCTSTR pPath)) return FALSE; // Tu instrukcje inicjujące dokument // zwykle po starcie aplikacji lub po wybraniu „Open” // Domyślna implementacja wywołuje „CObject::Serialize ” return TRUE; } BOOL CxxxDoc::OnSaveDocument(LPCTSTR pPath) { if(!CDocument::OnSaveDocument(LPCTSTR pPath)) return FALSE; // Tu instrukcje inicjujące dokument // zwykle po wybraniu „Save” lub ”Save As” // Domyślna implementacja wywołuje „CObject::Serialize ” return TRUE; } PO11-14 / 22

Przykład klasy dokumentu class CXxxDoc : public CDocument { // pominięto kod generowany automatycznie public: int Ile(); double Y(int); double X(int); double MinY(); double MinX(); double SkalaY(double); double SkalaX(double); virtual ~CXxxDoc(); protected: double minX, maxX, minY, maxY; double (*XY)[2]; int N; }; PO11-15 / 22

Metody klasy dokumentu double CXxxDoc::SkalaX(double wys) { return wys/(maxX-minX); } double CXxxDoc::MinX() {return minX; } double CXxxDoc::SkalaY(double szer) { return szer/(maxY-minY); } double CXxxDoc::MinY() {return minY; } PO11-16 / 22

Metody klasy dokumentu double CXxxDoc::X(int i) { return XY[i][0]; } double CXxxDoc::Y(int i) { return XY[i][1]; } int CXxxDoc::Ile() { return N; } PO11-17 / 22

Serializacja void CxxxDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } void CxxxDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar << N << minX << maxX << minY << maxY; for(int i=0; i<N; ++i) ar << XY[i][0]<< XY[i][1]; } else { ar >> N >> minX >> maxX >> minY >> maxY; delete []XY; XY=new double[N][2]; for(int i=0; i<N; ++i) ar >> XY[i][0]>> XY[i][1]; } PO11-18 / 22

Przykład klasy widoku class CXxxView : public CView { // pominięto kod generowany automatycznie public: void OnPrint(CDC *pDC, CPrintInfo *pInfo); protected: CRect rcPrint; double ax, ay; int minx, miny; }; PO11-19 / 22

Tworzenie widoku void CXxxView::OnDraw(CDC* pDC) { CXxxDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } void CXxxView::OnDraw(CDC* pDC) { CXxxDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC-> TextOut(10,20,"Wykres"); CRect rc; if(pDC-> IsPrinting()) rc = rcPrint; else GetClientRect(&rc); int szer = rc.right-30; int wys = rc.bottom-30; int bok = wys<szer ? wys:szer; int d = 15+(szer-bok)/2; ax = pDoc->SkalaX(bok); ay = pDoc->SkalaY(bok); PO11-20 / 22

Tworzenie widoku minx =(int)(ax*pDoc-> MinX()-d); miny = wys+(int)(30+ay*pDoc-> MinY()); int x =(int)(ax*pDoc->X(0)- minx); int y =(int)(miny-ay*pDoc-> Y(0)); pDC-> MoveTo(x, y); CPen czarny(PS_SOLID, 2, RGB(0,0,0)); CPen *pOld =pDC->SelectObject(&czarny); for(int i=1; i Ile(); i++) { x =(int)(ax*pDoc->X(i)- minx); y =(int)(miny-ay*pDoc-> Y(i)) pDC-> LineTo(x, y); { pDC-> SelectObject(pOld); } PO11-21 / 22

Tworzenie wydruku void CXxxView::OnPrint(CDC *pDC, CPrintInfo *pInfo) { if(pInfo) rcPrint = pInfo-> m_rectDraw; OnDraw(pDC); } PO11-22 / 22