Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałMaryla Białas Został zmieniony 10 lat temu
1
Visual C++ aczajka@man.poznan.pl Zastosowania Informatyki Wykład 6 Copyright, 2003 © Adam Czajka
2
Spis treści Obsługa myszy Obsługa klawiatury Grafika I
3
Copyright, 2003 © Adam Czajka Obsługa myszy Zdarzenia pochodzące od myszki Wciśnięcie przycisku Ruch kursora Podwójne wciśnięcie przycisku
4
Copyright, 2003 © Adam Czajka Obsługa myszy Komunikaty myszki WM_LBUTTONUP- lewy przycisk wyciśnięty WM_LBUTTONDOWN - lewy przycisk wciśnięty WM_LBUTTONDBLCLK- lewy przycisk podwójne kliknięcie WM_MOUSEMOVE- zmiana położenia kursora myszy WM_MOUSEWHEEL- zmiana położenia kółka na myszce
5
Copyright, 2003 © Adam Czajka Obsługa myszy Komunikaty myszki WM_RBUTTONUP WM_RBUTTONDOWN prawy przycisk WM_RBUTTONDBCLK WM_MBUTTONUP WM_MBUTTONDOWN środkowy przycisk WM_MBUTTONDBCLK
6
Copyright, 2003 © Adam Czajka Obsługa myszy Dodawanie funkcji obsługi myszy
7
Copyright, 2003 © Adam Czajka Obsługa myszy Dodawanie funkcji obsługi myszy void CAppView::OnLButtonDown(UINT nFlags, CPoint point) { char txt[30]; sprintf(txt, [%d, %d], point.x, point.y); theApp.m_pMainWnd->SetWindowText(txt); // CView ::OnLButtonDown(nFlags, point); } UINT nFlags – stan klawiszy funkcyjnych (SHIFT – MK_SHIFT, CTRL – MK_CONTROL) CPoint point – położenie kursora myszy w obszarze roboczym okna
8
Copyright, 2003 © Adam Czajka Obsługa myszy Dodawanie funkcji obsługi myszy
9
Copyright, 2003 © Adam Czajka Obsługa myszy Dodawanie funkcji obsługi myszy void CAppView::OnMouseMove(UINT nFlags, CPoint point) { char txt[30]; sprintf(txt, [%d, %d], point.x, point.y); theApp.m_pMainWnd->SetWindowText(txt); // CView :: OnMouseMove(nFlags, point); }
10
Copyright, 2003 © Adam Czajka Obsługa myszy Dodawanie funkcji obsługi myszy Zdarzenia od myszki docierają do okienka tylko wtedy, gdy kursor myszy znajduje się wewnątrz obszaru roboczego okna – przesunięcie kursora na ramkę okna powoduje wstrzymanie wysyłania komunikatów od myszki. Zdarzenie związane z ramką okienka należą do grupy zdarzeń WM_NC... afx_msg void OnNcLButtonDown( UINT nHitTest, CPoint point ); HTMENU, HTBORDER, HTCAPTION, HTSYSMENU, HTZOOM
11
Copyright, 2003 © Adam Czajka Obsługa myszy Dodawanie funkcji obsługi myszy obszar roboczy aplikacji menu aplikacji pasek narzędzi ramka z tytułem pasek przewijania wiersz statusu aplikacji
12
Copyright, 2003 © Adam Czajka Obsługa myszy Przechwytywanie myszy void CAppView::OnLButtonDown(UINT nFlags, CPoint point) { SetCapture(); } void CAppView::OnLButtonUp(UINT nFlags, CPoint point) { ReleaseCapture(); } CWnd::SetCapture() CWnd::ReleaseCapture()
13
Copyright, 2003 © Adam Czajka Obsługa myszy Zmiana kursora myszy void CAppView::OnLButtonDown(UINT nFlags, CPoint point) { BeginWaitCursor(); } void CAppView::OnLButtonUp(UINT nFlags, CPoint point) { EndWaitCursor(); } BeginWaitCursor() EndWaitCursor() ::SetCursor(::LoadCursor(AfxGetInstanceHandle(), IDC_UPARROW);
14
Copyright, 2003 © Adam Czajka Obsługa klawiatury Zdarzenia związane z klawiaturą WM_KEYUP- klawisz wyciśnięty WM_KEYDOWN - klawisz wciśnięty WM_CHAR- wprowadzono znak drukowalny klawisze mają przyporządkowane kody wirtualne VK_XXX: VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN, VK_RETURN
15
Copyright, 2003 © Adam Czajka Obsługa klawiatury Zdarzenia związane z klawiaturą – sekwencja zdarzeń WM_KEYDOWN WM_KEYDOWN WM_CHAR WM_CHAR WM_KEYUP WM_KEYUP
16
Copyright, 2003 © Adam Czajka Obsługa klawiatury Komunikaty pochodzące od klawiatury
17
Copyright, 2003 © Adam Czajka Obsługa klawiatury Komunikaty pochodzące od klawiatury void CAppView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { //nChar – znak wprowadzony z klawiatury //nRepCount – licznik powtórzeń znaku CView::OnChar(nChar, nRepCnt, nFlags); }
18
Copyright, 2003 © Adam Czajka Grafika Rodzaje grafiki Grafika rastrowa - Bitmapy (*.bmp, *.jpg) - Video (*.avi) Grafika wektorowa - Animacje (*.wmf) - Rysunki Tekst
19
Copyright, 2003 © Adam Czajka Grafika Urządzenia GDI GDI (kontekst urządzenia) Urządzenia fizyczneUrządzenia wirtualne Aplikacja MFC
20
Copyright, 2003 © Adam Czajka Grafika Kontekst urządzenia – klasa CDC class CDC { HDC m_hDC; public: CDC( );... virtual BOOL CreateDC( LPCTSTR lpszDriverName, LPCTSTR lpszDeviceName, LPCTSTR lpszOutput, const void* lpInitData ); virtual BOOL CreateCompatibleDC( CDC* pDC ); virtual BOOL DeleteDC( );... }
21
Copyright, 2003 © Adam Czajka Grafika Odrysowywanie okienka odpowiedzi na żądanie systemu Windows (komunikat WM-PAINT) odpowiedzi na polecenia użytkownika (implementacja obsługi poleceń w tworzonym programie) Aplikacja musi odrysować okienko w:
22
Copyright, 2003 © Adam Czajka Grafika Odrysowywanie okienka Każda aplikacja musi umieć odrysować swoje okienka na żądanie systemu Windows
23
Copyright, 2003 © Adam Czajka Grafika Odrysowywanie okienka void CAppView::OnDraw(CDC* pDC) { CAppDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // rysuje zielony prostokąt RECT rect; GetClientRect(&rect); CBrush brush(RGB(0, 255, 0)); pDC->FillRect(&rect, &brush); }
24
Copyright, 2003 © Adam Czajka Grafika Odrysowywanie okienka (0, 0) (W, H) CWnd::GetClientRect(LPRECT rect); H W
25
Copyright, 2003 © Adam Czajka Grafika Komunikat WM_PAINT
26
Copyright, 2003 © Adam Czajka Grafika Komunikat WM_PAINT void CAppView::OnPaint() { CPaintDC dc(this); // device context for painting RECT rect; GetClientRect(&rect); CBrush brush(RGB(0, 255, 0)); dc.FillRect(&rect, &brush); // Do not call CView::OnPaint() for painting messages }
27
Copyright, 2003 © Adam Czajka Grafika Komunikat WM_PAINT UpdateWindow(); – wysyła komunikat WM_PAINT Invalidate(BOOL erase=TRUE); – unieważnia obszar roboczy okna BOOL RedrawWindow( LPCRECT lpRectUpdate = NULL, CRgn* prgnUpdate = NULL, UINT flags = WCE_IF( 0 RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE )); – odrysowywuje okienko Generowanie komunikatu WM_PAINT (wymuszenie odmalowania okienka) Komunikatu WM_PAINT nie wysyłamy za pomocą SendMessage, czy PostMessage ale poprzez specjalne funkcje
28
Copyright, 2003 © Adam Czajka Grafika Rysowanie w oknie poza WM_PAINT void CAppView::OnLButtonUp(UINT nFlags, CPoint point) { CDC *pDC = GetDC(); RECT rect; GetClientRect(&rect); CBrush brush(RGB(0, 255, 0)); pDC->FillRect(&rect, &brush); ReleaseDC(pDC); } pobranie kontekstu do okienka zwolnienie kontekstu do okienka kontekst okienka pochodzi z puli uchwytów, których liczba jest OGRANICZONA !!!
29
Copyright, 2003 © Adam Czajka Grafika Rysowanie w oknie poza WM_PAINT – inne podejście void CAppView::OnLButtonUp(UINT nFlags, CPoint point) { CDC *pDC = GetDC(); RECT rect; GetClientRect(&rect); CBrush brush(RGB(0, 255, 0)); pDC->FillRect(&rect, &brush); ReleaseDC(pDC); }
30
Copyright, 2003 © Adam Czajka Podsumowanie Obsługa myszy Obsługa klawiatury Grafika I
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.