Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie w Środowisku Windows

Podobne prezentacje


Prezentacja na temat: "Programowanie w Środowisku Windows"— Zapis prezentacji:

1 Programowanie w Środowisku Windows
Mysz i klawiatura Programowanie w Środowisku Windows

2 Programowanie w Środowisku Windows
Plan wykładu Focus okna Klawiatura Przyciśnięcie klawisza Generowanie znaków Obsługa myszy Programowanie w Środowisku Windows

3 Programowanie w Środowisku Windows
Focus okna Adresat komunikatu Pole MSG::hwnd Okno aktywne ang. focus – adresat komunikatów Okna potomne – mogą mieć focus, ale aktywny jest rodzic Programowanie w Środowisku Windows

4 Programowanie w Środowisku Windows
Focus okna Zmiana focusa Komunikaty WM_SETFOCUS WM_KILLFOCUS Przydzielanie focusa SetFocus() / GetFocus() W obrębie jednego wątku Programowanie w Środowisku Windows

5 Programowanie w Środowisku Windows
Focus okna Aktywacja okna SetActiveWindow() / GetActiveWindow() WM_ACTIVATE Przydzielanie w obrębie jednego wątku Programowanie w Środowisku Windows

6 Programowanie w Środowisku Windows
Focus okna Systemowa kolejka komunikatów Rozsyłanie komunikatów Po jednym Adresat – okno posiadające focus Możliwa zmiana focusa Komunikaty z myszy i klawiatury sa w systemowej kolejce i rozsylane po jednym do okna, ktore ma akurat focus. Obsluga komunikatu moze zmienic focus okna, dlatego okno nie otrzymuje wiecej niz jeden komunikat. Mozna pokazac przyklad z KEYDOWN / KEYUP (albo zasygnalizowac, ze pokaze sie pozniej) – jezeli sie debuguje, to dochodzi tylko komunikat DOWN – UP jest juz kierowany do VS Programowanie w Środowisku Windows

7 Programowanie w Środowisku Windows
Klawiatura Komunikaty Naciśnięcie klawisza Generacja znaku Obsługa zależnie od zastosowania Programowanie w Środowisku Windows

8 Programowanie w Środowisku Windows
Klawiatura Naciśnięcie klawisza WM_KEYDOWN / WM_SYSKEYDOWN WM_KEYUP / WM_SYSKEYUP Przytrzymanie klawisza – seria WM_KEYDOWN GetMessageTime() Klawisze systemowe Alt + function key, Tab, Esc Blokowanie Klawisze systemowe (Alt+...) mozna zablokowac poprzez wylaczenie obslugi komunikato SYS. Przyklad – Alt+F4. Niektore przechwytywane przez system, np Alt+Tab GetMessageTime – stempel czasowy komunikatu pobranego za pomoca GetMessage Programowanie w Środowisku Windows

9 Programowanie w Środowisku Windows
Klawiatura Parametry komunikatów KEY wParam – kod VK_*** VK_MENU = Alt lParam Repeat Count Context Code Repeat Count > 1 – aplikacja nie nadaza z obsluga – mozna zignorowac, zeby nie kumulowac akcji Context Code: 1 dla systemowych (wyjatek – gdy okno jest aktywne, ale zminimalizowane, wtedy normalne przyciski przychodza jako SYS z flaga 0); 0 dla pozostalych (wyjatek – znaki regionalne, np. Alt+a) Przyklad: - ustawic prior na niski, poruszac myszka case WM_KEYDOWN: // while (GetAsyncKeyState (VK_F1) >= 0) ; if(LOWORD(lParam) > 1) { _stprintf(pszHitTestText, _T("Repeat: %d"), LOWORD(lParam)); MessageBox(hwnd, pszHitTestText, _T("a"), 0); } return 0; Programowanie w Środowisku Windows

10 Programowanie w Środowisku Windows
Klawiatura Sprawdzenie stanu klawisza GetKeyState(VK_***) Klawisze dwustanowe (CapsLock) Uwaga: stan klawiatury w momencie otrzymania komunikatu Sprawdzanie asynchroniczne GetAsyncKeyState() GetKeyState – zwraca wart ujemna jak klawisz jest wcisniety (najstarszy bit ustawiony) lub dodatnia gdy przelaczony (najmlodszy bit ustawiony). Nie mozna zrobic czegos takiego: while (GetKeyState (VK_F1) >= 0) ; - program zawisnie. Async sprawdza stan przy kazdorazowym wywolaniu/ Programowanie w Środowisku Windows

11 Programowanie w Środowisku Windows
Klawiatura Stosowanie KEYDOWN Strzałki, F1-F12 Insert, Delete, Shift, Ctrl, Alt Nie używać do znaków Wiązanie komunikatów Zapewnienie identycznej obsługi SendMessage() Wiązanie komunikatow – np. pomiedzy myszka i klawiatura Programowanie w Środowisku Windows

12 Programowanie w Środowisku Windows
Klawiatura Komunikaty znaków WM_CHAR / WM_SYSCHAR WM_DEADCHAR / WM_SYSDEADCHAR lParam – tak samo jak przy KEY wParam – kod ANSI / UNICODE (TCHAR) RegisterClassA() i RegisterClassW() Unicode / Ansi – zaleznie od sposobu rejestarcji klasy Deadchar – znaki diakrytyczne, informacja powielona w komunikacie Char Programowanie w Środowisku Windows

13 Programowanie w Środowisku Windows
Klawiatura Generacja komunikatu WM_CHAR TranslateMessage() Kolejność komunikatów: DOWN, CHAR, UP Obsługa znaków posiadających kod ASCII Zasada generacji komunikatow: KEYDOWN -> CHAR -> KEYUP Przyklad – usuniecie translate. Okno otrzymuje KEYUP tylko, gdy ma focus (postawic breakpoint na KEYDOWN – KEYUP nie dotrze, bo otrzyma go VS). --- Koniec wykladu Programowanie w Środowisku Windows

14 Programowanie w Środowisku Windows
Klawiatura Karetka – opis i zasady Okno z focusem Tylko jedno okno w systemie Tworzenie i niszczenie Komunikaty SETFOCUS i KILLFOCUS Wyświetlanie i ukrywanie Karetka po utworzeniu jest niewidoczna Akcje wielokrotne są kumulowane Obsługa WM_PAINT Karetke nalezy ukryc podczas rysowania. Programowanie w Środowisku Windows

15 Programowanie w Środowisku Windows
Klawiatura Funkcje obsługi karetki CreateCaret() Get / SetCaretPos() ShowCaret() HideCaret() DestroyCaret() Szybkość migania Get / SetCaretBlinkTime() Przyklad z czasem – oddzialuje na caly system Programowanie w Środowisku Windows

16 Programowanie w Środowisku Windows
Klawiatura Klawisze specjalne Klawisze myszy Klawisze zasilania WM_APPCOMMAND wParam – uchwyt okna lParam – identyfikator DefWindowProc() – przekazuje rodzicowi lub do powłoki Jezeli okno nie jest oknem potomnym, to przekazuje do powloki Programowanie w Środowisku Windows

17 Programowanie w Środowisku Windows
Mysz – komunikaty Położenie kursora – lParam GET_X_LPARAM, GET_Y_LPARAM Stan przycisków – wParam MK_LBUTTON, MK_SHIFT, MK_CONTROL GetKeyState() / GetAsyncKeyState() Akcje: Ruch Przyciski Kółko Programowanie w Środowisku Windows

18 Programowanie w Środowisku Windows
Mysz – kliknięcia Kliknięcie w obszar roboczy WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK – zależnie od CS_DBLCLKS Kliknięcie poza obszarem roboczym WM_NC*** Współrzędne ekranu (lParam) Identyfikator fragmentu okna – HT*** (wParam) wParam Specifies the hit-test value returned by the DefWindowProc function as a result of processing the WM_NCHITTEST message. For a list of hit-test values, see WM_NCHITTEST. Programowanie w Środowisku Windows

19 Programowanie w Środowisku Windows
Mysz – ruch WM_MOUSEMOVE Okno nie musi być aktywne Częstotliwość – przykład... WM_MOUSEWHEEL wParam GET_KEYSTATE_WPARAM GET_WHEEL_DELTA_WPARAM lParam – współrzędne Przykład Przyklad – rysowanie kropki przy kazdym mousemove GET_WHEEL_DELTA_WPARAM – zwraca przesuniecie w WHEEL_DELTA (=120) + do gory - na dol Programowanie w Środowisku Windows

20 Programowanie w Środowisku Windows
Mysz – obsługa Przechwytywanie komunikatów myszy SetCapture(), ReleaseCapture() WM_CAPTURECHANGED Dwuklik Styl okna CS_DBLCLKS LBUTTONDBLCLK zamiast LBUTTONDOWN Zgodność akcji Uwazac z przechwytywaniem komunikatow – glownie stosowac do buttonUP Pierwszy klik powinien zawsze robic to samo Programowanie w Środowisku Windows

21 Mysz – testowanie położenia
WM_NCHITTEST Poprzedza komunikaty myszy DefWindowProc() – identyfikator fragmentu okna HTCLIENT, HTNOWHERE, HTERROR Komunikaty obszaru roboczego dla HTCLIENT Wysyłany, gdy okno nie przechwytuje komunikatów The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse. HTERROR – beep Mozna pokazac, ze nie jest wysylany w momencie, gdy przechwytywane sa komunikaty myszy z przycisnietym klawiszem myszy. Programowanie w Środowisku Windows

22 Programowanie w Środowisku Windows
Mysz – śledzenie TrackMouseEvent() WM_MOUSEHOVER WM_MOUSELEAVE Struktura TRACKMOUSEEVENT Czas domyślny – 400ms Mozna sobie zarzadac wyslania komunikatu, jezeli mysz opusci / przebywa w oknie przez zadany czas Programowanie w Środowisku Windows

23 Programowanie w Środowisku Windows
Mysz – sterowanie ShowCursor() Zliczanie wywołań – kumulacja Set / GetCursorPos() Emulacja myszy za pomocą klawiatury Programowanie w Środowisku Windows

24 Programowanie w Środowisku Windows
Podsumowanie Komunikaty urządzeń zewnętrznych Przekazywane po jednym do okna z focusem Karetka – zasób systemowy Sprzężenie komunikatów klawiatury i myszy Programowanie w Środowisku Windows

25 Programowanie w Środowisku Windows
Dziękuję za uwagę! Programowanie w Środowisku Windows


Pobierz ppt "Programowanie w Środowisku Windows"

Podobne prezentacje


Reklamy Google