WinAPI - Wywolanie eventu w evencie

0

Ostatnio pisałem program w wimAPI i miałem event WM_LBUTTONDOWN i w tym evencie miałem pętle. I chciałbym tak zrobić, żeby wyjście z tej pętli nastepowało po puszczeniu LPM czyli wywołaniu eventu WM_LBUTTONUP. Jak to zrobić? Próbowałem użyć globalnej zmiennej boolowskiej. ale tak się nie da bo z tego co zauważyłem to program dopóki nie zakonczy jednego eventu to nie rozpocznie następnego.

0

Nie robi się pętli w kolejce komunikatów. Zrób oddzielny wątek.

1

Polecam Timer

2

to program dopóki nie zakonczy jednego eventu to nie rozpocznie następnego.

No zastanówmy się dlaczego.

Pętla komunikatów, w najprostszej możliwej postaci to while (GetMessage(...)) DispatchMessage(...);

GetMessage czeka na zdarzenie - np. na kliknięcie myszą. Kiedy jakieś nastąpi, zostaje zwrócone do zmiennej typu MSG.
DispatchMessage odpala twoje WindowProc z odpowiednimi parametrami1.

Jak widzisz, jest to zwykła pętla, w której procedura okna jest cyklicznie uruchamiana. Wszystko się dzieje w ramach jednego wątka, i nic się samo magicznie nie uruchamia. Jest więc jasne, że jeśli procedura okna się nie kończy i wpada we własną pętlę, to DispatchMessage nie wraca i na ten czas zawieszasz obsługę kolejnych komunikatów.

1) teoretycznie DispatchMessage mogłoby nie istnieć, uruchamiałoby się bezpośrednio procedurę okna, ale DispatchMessage robi też parę innych rzeczy, jak obsługa timerów, oraz gdy program ma wiele okien automatycznie wybiera procedurę w zależności od okna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1