Obsługując zdarzenie aplikacja może zwrócić do nadawcy (systemu lub innego procesu) liczbę, która będzie jakoś zinterpretowana w zależności od rodzaju zdarzenia. Może to być na przykład odpowiedź, czy udało się zainicjować zmienne, albo czy jest zgoda na zamknięcie systemu.
Można też definiować własne zdarzenia, i np. komunikować się przy ich pomocy między okienkami lub procesami.
Do programowego tworzenia zdarzeń służą dwie funkcje: SendMessage – tworzy zdarzenie i wstrzymuje wykonanie do czasu jego przetworzenia przez adresata. Zwraca odpowiedź adresata. PostMessage – dopisuje zdarzenie do kolejki adresata bez oczekiwania na jego przetworzenie
Istnieją tzw. okna modalne, wstrzymujące przetwarzanie zdarzeń przez pozostałe okna danej aplikacji (np. okno z pytaniem na które należy odpowiedzieć tak/nie). Istnieją też systemowe okna modalne, wstrzymujące przetwarzanie zdarzeń przez wszystkie inne okna (np. pytanie o potwierdzenie zamknięcia systemu).
Przykład pętli obsługi zdarzeń: MSG msg; while(GetMessage(&msg, NULL, 0, 0))
TranslateMessage(&msg); DispatchMessage(&msg);