Komunikaty w Windows. Jarosław Kuchta

Podobne dokumenty
Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.5

PROGRAMOWANIE SYSTEMÓW WBUDOWANYCH INTER-PROCESS COMMUNICATION

Zegary. Zegary (timers) umożliwiają cykliczne w danych odstępach czasu wykonać określone operacje.

Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (Delphi)

Podstawowy projekt OpenGL utworzony przy użyciu środowisk programistycznych firmy Microsoft.

Podstawy programowania w języku C dla środowiska Windows

IFiZR Laboratorium 5 Info

Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);

1.1. Programowanie dla Windows. Programowanie dla Windows. Komunikaty w systemie Windows. Application Programming Interface

Tworzenie aplikacji Windows Podstawy obsługi komunikatów Windows (C++ Builder)

Programowanie w środowisku Windows. mgr inż. Krzysztof Mossakowski k.mossakowski@mini.pw.edu.pl

Programowanie współbieżne. Tworzenie i obsługa semaforów oraz wątków przy użyciu funkcji Windows API.

Podstawy programowania w języku C dla środowiska Windows

Programowanie na poziomie sprzętu. Programowanie w Windows API

Programowanie w środowiskach RAD Język C++ w środowiskach RAD

Microsoft Visual C++

Wprowadzenie do programowania w Windows

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie I. Wprowadzenie do programowania w Windows

PROE wykład 8 Interfejs użytkownika (GUI) dr inż. Jacek Naruniec

Podstawy programowania w środowisku Windows. Oto identyfikatory najczęściej obsługiwanych meldunków (przedrostek WM to skrót od Windows message):

Załącznik do ćwiczenia w środowisku MASM32 wersji 10. Tryb graficzny w systemie Windows

1. Wstęp. 2. Szablon. 1 WinApi Wstęp i szablon. Czym jest API?

Cechy systemu Windows

Projektowanie i programowanie aplikacji biznesowych. Wykład 2

Podstawy Programowania PalmOS

DLL Injection. Przejęcie kontroli nad procesem

Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

Mechanizmy pracy równoległej. Jarosław Kuchta

Lekcja 5. Funkcje handlemessage() i initialize(), konstruktor i destruktor

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Podstawowe typy danych

Programowanie w języku C++ z użyciem Windows API

Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych

Formaty plików graficznych - wprowadzenie

Wątki w MFC. Proces - egzemplarz wykonywania aplikacji Wątek (thread) ścieżka wykonywania w aplikacji

Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Wątki w Android OS. Matt Rutkowski. GynSoft sp. z o.o. matt@gynsoft.net

Bloki anonimowe w PL/SQL

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Ćwiczenia 2 IBM DB2 Data Studio

mgr inż. Przemysław Kudłacik Trwałe przechwytywanie okien w systemach MS Windows

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Budowa i generowanie planszy

Politechnika Wrocławska Urządzenia peryferyjne sprawozdanie z laboratorium 1. Zadania do wykonania 2. Wstęp teoretyczny 3. Realizacja ćwiczenia

Opis protokołu RPC. Grzegorz Maj nr indeksu:

Podstawy Programowania Podstawowa składnia języka C++

IPC: Kolejki komunikatów

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Monitory. Jarosław Kuchta

Simulator of Operating System

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Podstawy programowania skrót z wykładów:

Najnowsza wersja dokumentu dostępna pod adresem

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

1 Podstawy c++ w pigułce.

4 bity zarezerwowane dla przyszłych zastosowań 11 bitów określających źródło błędu 16 bitów określających rodzaj błędu.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

DOKUMENTACJA IMPLEMENTACJI MECHANIZMÓW OBSŁUGI AHMES SMS (soap)

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Pobieranie argumentów wiersza polecenia

Twisted. Silnik Twojego Internetu. Jan Urbański Ducksboard. PyWaw #25, Warszawa, 10 czerwca 2013

System operacyjny Linux

Niniejsza skrócona instrukcja obsługi pomaga w rozpoczęciu korzystania z urządzenia IRIScan TM Mouse Executive 2.

Laboratorium Systemów SCADA

Aplikacja Sieciowa wątki po stronie klienta

Programowanie pod Windows

Dodanie nowej formy do projektu polega na:

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Następnie uruchom b-link z Menu Start lub ponownie uruchom komputer.

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Sterbox e-pilot Dla iphone/ipad/ ANDROID

Niniejsza skrócona instrukcja obsługi pomaga w rozpoczęciu korzystania z urządzenia IRIScan TM Mouse 2.

1 Podstawy c++ w pigułce.

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

Symfonia Mała Księgowość 2013 Specyfikacja zmian

JPK VAT wysyłka za pośrednictwem profilu zaufanego z systemu epuap

Podstawy Programowania C++

Podręcznik użytkownika programu. Ceremonia 3.1

Laboratorium - Planowanie zadania przy użyciu GUI i polecenia AT w systemie Windows XP

Język C zajęcia nr 5

imei CYFROWE PRZETWARZANIE SYGNAŁÓW Laboratorium Temat: Tworzenie aplikacji w środowisku LabWindows/CVI Instytut Metrologii, Elektroniki i Informatyki

Sterbox. e-pilot dla Zegarka z systemem android (for smartwatch) Wersja dla Sterbox od v.4.0

Oto istotne informacje o skrótach klawiszowych ZoomText:

Programowanie wielowątkowe. Jarosław Kuchta

Instrukcja ręcznej konfiguracji połączenia z Internetem przez. modem ED77 w systemie Windows XP

Układy VLSI Bramki 1.0

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

CAN LOGGER OPIS. Ponownie uruchamiany program CAN Logger

Instrukcje cykliczne (pętle) WHILE...END WHILE

Transkrypt:

Komunikaty w Windows Jarosław Kuchta

Okna i procedury okien W Windows każde okno ma swoją procedurę sterującą. LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { } gdzie: hwnd jest uchwytem identyfikatorem okna message jest komunikatem kierowanym do okna wparam jest parametrem krótkim komunikatu lparam jest parametrem długim komunikatu

Komunikaty Komunikat jest poleceniem do wykonania dla procedury okna Rodzaje komunikatów: komunikaty systemowe (generowane przez system w reakcji na zdarzenia pochodzące od urządzeń) komunikaty aplikacji (zdefiniowane w aplikacji i wysyłane od okna do okna).

Komunikaty systemowe rozpoznawane przez przedrostek WM_ - duża grupa komunikatów ogólnych CCM_ - komunikaty uogólnione różnych kontrolek EM_, EN_ - komunikaty pola edycji CDM_ - komunikaty dialogów (np. otwarcia pliku)

Komunikaty ogólne komunikaty okien powiadomienia o zdarzeniach okien powiadomienia o zdarzeniach klawiatury komunikaty klawiatury powiadomienia o skrótach klawiaturowych komunikaty skrótów klawiaturowych powiadomienia o zdarzeniach myszy

Komunikaty okien WM_PAINT odrysowanie okna WM_GETFONT pobranie czcionki okna WM_SETFONT ustawienie czcionki okna WM_SETICON ustawienie ikony okna WM_SETTEXT wpisanie tekstu do okna (kontrolka też jest oknem) WM_GETTEXTLENGTH pobranie długości tekstu wprowadzonego do okna WM_GETTEXT pobranie tekstu wprowadzonego do okna

Powiadomienia o zdarzeniach okien WM_CREATE okno zostało utworzone WM_ACTIVATE okno zostało aktywowane WM_ENABLE okno dostało zezwolenie na przyjmowanie komunikatów od klawiatury i myszy WM_SETFOCUS okno będzie otrzymywać powiadomienia o zdarzeniach od klawiatury WM_KILLFOCUS okno przestaje otrzymywać powiadomienia o zdarzeniach od klawiatury (tylko jedno okno dostaje WM_CLOSE okno zostało zamknięte WM_DESTROY okno zostało zniszczone

Powiadomienia o zdarzeniach klawiatury WM_KEYDOWN klawisz został naciśnięty WM_KEYUP klawisz został zwolniony WM_CHAR przyszedł znak od klawiatury

Powiadomienia o zdarzeniach myszy WM_LBUTTONDOWN lewy przycisk naciśnięty WM_LBUTTONUP lewy przycisk zwolniony WM_LBUTTONDBLCLK lewy przycisk naciśnięty dwukrotnie WM_MBUTTONDOWN środkowy przycisk naciśnięty WM_MBUTTONUP środkowy przycisk zwolniony WM_MBUTTONDBLCLK środkowy przycisk naciśnięty dwukrotnie WM_RBUTTONDOWN prawy przycisk naciśnięty WM_RBUTTONUP prawy przycisk zwolniony WM_RBUTTONDBLCLK prawy przycisk naciśnięty dwukrotnie WM_MOUSEMOVE mysz przesunięta WM_MOUSEWHEEL kółko myszy przekręcone

Przekazywanie komunikatów komunikaty niekolejkowane komunikaty kolejkowane

Komunikaty niekolejkowane Wymagają natychmiastowej reakcji okna, np.: WM_ACTIVATE WM_SETFOCUS WM_SETCURSOR Wysyłane przez funkcje: SendMessage SendMessageTimeout SendNotifyMessage BroadcastSystemMessage

Funkcja SendMessage LRESULT WINAPI SendMessage( in HWND hwnd, in UINT Msg, in WPARAM wparam, in LPARAM lparam ); Wysyła komunikat do procedury okna i czeka na jego obsłużenie. Nie powraca, dopóki okno docelowe nie zareaguje na komunikat.

Funkcja SendMessageTimeout LRESULT WINAPI SendMessageTimeout( in HWND hwnd, in UINT Msg, in WPARAM wparam, in LPARAM lparam, in UINT fuflags, in UINT utimeout, out_opt PDWORD_PTR lpdwresult ); Wysyła komunikat do okna i czeka na jego obsłużenie, ale tylko określony czas. Umożliwia przesłanie komunikatu do wszystkich okien najwyższego poziomu (głównych okien programów).

Funkcja SendNotifyMessage LRESULT WINAPI SendNotifyMessage( in HWND hwnd, in UINT Msg, in WPARAM wparam, in LPARAM lparam ); Wysyła komunikat do okna i: jeśli okno należy do tego samego wątku, to czeka na jego obsłużenie, jeśli nie, to przekazuje komunikat do procedury okna i wraca od razu.

Funkcja BroadcastSystemMessage long WINAPI BroadcastSystemMessage( in DWORD dwflags, inout_opt LPDWORD lpdwrecipients, in UINT uimessage, in WPARAM wparam, in LPARAM lparam ); Wysyła komunikat do określonych odbiorców: aplikacji instalowanych sterowników urządzeń systemowych sterowników urządzeń sterowników sieciowych

Komunikaty kolejkowane komunikaty od klawiatury komunikaty od myszy inne, które nie muszą być obsłużone natychmiast umieszczane w kolejce komunikatów

Kolejki komunikatów Pojedyncza kolejka systemowa Kolejki własne wątków GUI Inicjalnie każdy wątek jest tworzony bez kolejki komunikatów Dla wątku, który wywołuje funkcje GUI, przy pierwszym wywołaniu tworzona jest kolejka komunikatów. Funkcje nie należące do GUI nie tworzą kolejki komunikatów.

Wysyłanie komunikatów do kolejki Funkcje: PostMessage PostThreadMessage Komunikaty są umieszczane na końcu kolejki. Komunikaty opuszczają kolejkę i są przekazywane do procedury okna w kolejności ich umieszczania w kolejce z wyjątkiem: WM_PAINT WM_TIMER WM_QUIT które są zatrzymywane w kolejce do czasu, aż nie ma w niej innych komunikatów i wtedy są przekazywane do procedury okna

Funkcja PostMessage LRESULT WINAPI PostMessage( in HWND hwnd, in UINT Msg, in WPARAM wparam, in LPARAM lparam ); Wysyła komunikat do kolejki wątku skojarzonego z oknem i powraca natychmiast

Funkcja PostThreadMessage LRESULT WINAPI PostThreadMessage( in DWORD idthread, in UINT Msg, in WPARAM wparam, in LPARAM lparam ); Wysyła komunikat do kolejki określonego wątku i powraca natychmiast

Pętla obsługi komunikatów Aplikacja pobiera w pętli komunikaty z kolejki, tłumaczy je i kieruje do właściwej procedury okna. MSG msg; BOOL bret; while( (bret = GetMessage( &msg, NULL, 0, 0 ))!= 0) { if (bret == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } }

Funkcja GetMessage BOOL WINAPI GetMessage( out LPMSG lpmsg, in_opt HWND hwnd, in UINT wmsgfiltermin, in UINT wmsgfiltermax ); Pobiera z kolejki komunikat kierowany do określonego okna. Umożliwia filtrowanie komunikatów. Wynik podaje w strukturze LPMSG

Funkcja TranslateMessage BOOL WINAPI TranslateMessage( in const MSG *lpmsg ); Tłumaczy komunikaty klawiatury, np.: WM_KEYDOWN i WM_KEYUP są tłumaczone na WM_CHAR (gdy to możliwe)

Funkcja DispatchMessage LRESULT WINAPI DispatchMessage( in const MSG *lpmsg ); Kieruje komunikat do właściwego okna określonego w strukturze MSG

Obsługa komunikatów HWND hwndcombo; int ctxtlen; PSTR pszmem; switch (umsg) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDD_ADDCBITEM: // handle of the combo box message return TRUE; } break; }

Funkcja PeekMessage BOOL WINAPI PeekMessage( out LPMSG lpmsg, in_opt HWND hwnd, in UINT wmsgfiltermin, in UINT wmsgfiltermax, in UINT wremovemsg ); Przekazuje komunikaty wysłane metodą Send, sprawdza, czy w kolejce są komunikaty i zwraca komunikat (gdy kolejka jest niepusta)

Sprawdzanie komunikatów w czasie długotrwałych operacji HWND hwnd; BOOL fdone; MSG msg; // Begin the operation and continue until it is complete // or until the user clicks the mouse or presses a key. fdone = FALSE; while (!fdone) { fdone = DoLengthyOperation(); // application-defined function // Remove any messages that may be in the queue. If the // queue contains any mouse or keyboard messages, end the operation. while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) { switch(msg.message) { case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_KEYDOWN: // Perform any required cleanup. fdone = TRUE; } } }