Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałBogna Nowacka Został zmieniony 9 lat temu
1
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
2
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
3
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
4
Klasy aplikacji SDI CObiect CCmdTarget CDocTemplateCWinAppCDocumentCWnd CViewCFrameWndCDialogCSingleDocTemplate CXxxViewCMainFrameCAboutDlgCXxxDocCXxxApp Klasy aplikacji xxx PO11-4 / 22
5
Elementy aplikacji CMainFrame CxxxView CStatusBar CToolbar Okno widoku PO11-5 / 22
6
Menu aplikacji SDI PO11-6 / 22
7
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
8
Właściwości komendy Podkreślenie PO11-8 / 22
9
Właściwości separatora PO11-9 / 22
10
Właściwości podmenu PO11-10 / 22
11
Programowanie komendy PO11-11 / 22
12
Zmiana komendy PO11-12 / 22
13
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
14
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
15
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
16
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
17
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
18
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
19
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
20
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
21
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
22
Tworzenie wydruku void CXxxView::OnPrint(CDC *pDC, CPrintInfo *pInfo) { if(pInfo) rcPrint = pInfo-> m_rectDraw; OnDraw(pDC); } PO11-22 / 22
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.