e14743d1 |
1 | <HTML |
2 | ><HEAD |
3 | ><TITLE |
4 | >SDL_Event</TITLE |
5 | ><META |
6 | NAME="GENERATOR" |
7 | CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ |
8 | "><LINK |
9 | REL="HOME" |
10 | TITLE="SDL Library Documentation" |
11 | HREF="index.html"><LINK |
12 | REL="UP" |
13 | TITLE="SDL Event Structures." |
14 | HREF="eventstructures.html"><LINK |
15 | REL="PREVIOUS" |
16 | TITLE="SDL Event Structures." |
17 | HREF="eventstructures.html"><LINK |
18 | REL="NEXT" |
19 | TITLE="SDL_ActiveEvent" |
20 | HREF="sdlactiveevent.html"></HEAD |
21 | ><BODY |
22 | CLASS="REFENTRY" |
23 | BGCOLOR="#FFF8DC" |
24 | TEXT="#000000" |
25 | LINK="#0000ee" |
26 | VLINK="#551a8b" |
27 | ALINK="#ff0000" |
28 | ><DIV |
29 | CLASS="NAVHEADER" |
30 | ><TABLE |
31 | SUMMARY="Header navigation table" |
32 | WIDTH="100%" |
33 | BORDER="0" |
34 | CELLPADDING="0" |
35 | CELLSPACING="0" |
36 | ><TR |
37 | ><TH |
38 | COLSPAN="3" |
39 | ALIGN="center" |
40 | >SDL Library Documentation</TH |
41 | ></TR |
42 | ><TR |
43 | ><TD |
44 | WIDTH="10%" |
45 | ALIGN="left" |
46 | VALIGN="bottom" |
47 | ><A |
48 | HREF="eventstructures.html" |
49 | ACCESSKEY="P" |
50 | >Prev</A |
51 | ></TD |
52 | ><TD |
53 | WIDTH="80%" |
54 | ALIGN="center" |
55 | VALIGN="bottom" |
56 | ></TD |
57 | ><TD |
58 | WIDTH="10%" |
59 | ALIGN="right" |
60 | VALIGN="bottom" |
61 | ><A |
62 | HREF="sdlactiveevent.html" |
63 | ACCESSKEY="N" |
64 | >Next</A |
65 | ></TD |
66 | ></TR |
67 | ></TABLE |
68 | ><HR |
69 | ALIGN="LEFT" |
70 | WIDTH="100%"></DIV |
71 | ><H1 |
72 | ><A |
73 | NAME="SDLEVENT" |
74 | ></A |
75 | >SDL_Event</H1 |
76 | ><DIV |
77 | CLASS="REFNAMEDIV" |
78 | ><A |
79 | NAME="AEN3711" |
80 | ></A |
81 | ><H2 |
82 | >Name</H2 |
83 | >SDL_Event -- General event structure</DIV |
84 | ><DIV |
85 | CLASS="REFSECT1" |
86 | ><A |
87 | NAME="AEN3714" |
88 | ></A |
89 | ><H2 |
90 | >Structure Definition</H2 |
91 | ><PRE |
92 | CLASS="PROGRAMLISTING" |
93 | >typedef union{ |
94 | Uint8 type; |
95 | SDL_ActiveEvent active; |
96 | SDL_KeyboardEvent key; |
97 | SDL_MouseMotionEvent motion; |
98 | SDL_MouseButtonEvent button; |
99 | SDL_JoyAxisEvent jaxis; |
100 | SDL_JoyBallEvent jball; |
101 | SDL_JoyHatEvent jhat; |
102 | SDL_JoyButtonEvent jbutton; |
103 | SDL_ResizeEvent resize; |
104 | SDL_ExposeEvent expose; |
105 | SDL_QuitEvent quit; |
106 | SDL_UserEvent user; |
107 | SDL_SysWMEvent syswm; |
108 | } SDL_Event;</PRE |
109 | ></DIV |
110 | ><DIV |
111 | CLASS="REFSECT1" |
112 | ><A |
113 | NAME="AEN3717" |
114 | ></A |
115 | ><H2 |
116 | >Structure Data</H2 |
117 | ><DIV |
118 | CLASS="INFORMALTABLE" |
119 | ><A |
120 | NAME="AEN3719" |
121 | ></A |
122 | ><P |
123 | ></P |
124 | ><TABLE |
125 | BORDER="0" |
126 | CLASS="CALSTABLE" |
127 | ><TBODY |
128 | ><TR |
129 | ><TD |
130 | ALIGN="LEFT" |
131 | VALIGN="TOP" |
132 | ><TT |
133 | CLASS="STRUCTFIELD" |
134 | ><I |
135 | >type</I |
136 | ></TT |
137 | ></TD |
138 | ><TD |
139 | ALIGN="LEFT" |
140 | VALIGN="TOP" |
141 | >The type of event</TD |
142 | ></TR |
143 | ><TR |
144 | ><TD |
145 | ALIGN="LEFT" |
146 | VALIGN="TOP" |
147 | ><TT |
148 | CLASS="STRUCTFIELD" |
149 | ><I |
150 | >active</I |
151 | ></TT |
152 | ></TD |
153 | ><TD |
154 | ALIGN="LEFT" |
155 | VALIGN="TOP" |
156 | ><A |
157 | HREF="sdlactiveevent.html" |
158 | >Activation event</A |
159 | ></TD |
160 | ></TR |
161 | ><TR |
162 | ><TD |
163 | ALIGN="LEFT" |
164 | VALIGN="TOP" |
165 | ><TT |
166 | CLASS="STRUCTFIELD" |
167 | ><I |
168 | >key</I |
169 | ></TT |
170 | ></TD |
171 | ><TD |
172 | ALIGN="LEFT" |
173 | VALIGN="TOP" |
174 | ><A |
175 | HREF="sdlkeyboardevent.html" |
176 | >Keyboard event</A |
177 | ></TD |
178 | ></TR |
179 | ><TR |
180 | ><TD |
181 | ALIGN="LEFT" |
182 | VALIGN="TOP" |
183 | ><TT |
184 | CLASS="STRUCTFIELD" |
185 | ><I |
186 | >motion</I |
187 | ></TT |
188 | ></TD |
189 | ><TD |
190 | ALIGN="LEFT" |
191 | VALIGN="TOP" |
192 | ><A |
193 | HREF="sdlmousemotionevent.html" |
194 | >Mouse motion event</A |
195 | ></TD |
196 | ></TR |
197 | ><TR |
198 | ><TD |
199 | ALIGN="LEFT" |
200 | VALIGN="TOP" |
201 | ><TT |
202 | CLASS="STRUCTFIELD" |
203 | ><I |
204 | >button</I |
205 | ></TT |
206 | ></TD |
207 | ><TD |
208 | ALIGN="LEFT" |
209 | VALIGN="TOP" |
210 | ><A |
211 | HREF="sdlmousebuttonevent.html" |
212 | >Mouse button event</A |
213 | ></TD |
214 | ></TR |
215 | ><TR |
216 | ><TD |
217 | ALIGN="LEFT" |
218 | VALIGN="TOP" |
219 | ><TT |
220 | CLASS="STRUCTFIELD" |
221 | ><I |
222 | >jaxis</I |
223 | ></TT |
224 | ></TD |
225 | ><TD |
226 | ALIGN="LEFT" |
227 | VALIGN="TOP" |
228 | ><A |
229 | HREF="sdljoyaxisevent.html" |
230 | >Joystick axis motion event</A |
231 | ></TD |
232 | ></TR |
233 | ><TR |
234 | ><TD |
235 | ALIGN="LEFT" |
236 | VALIGN="TOP" |
237 | ><TT |
238 | CLASS="STRUCTFIELD" |
239 | ><I |
240 | >jball</I |
241 | ></TT |
242 | ></TD |
243 | ><TD |
244 | ALIGN="LEFT" |
245 | VALIGN="TOP" |
246 | ><A |
247 | HREF="sdljoyballevent.html" |
248 | >Joystick trackball motion event</A |
249 | ></TD |
250 | ></TR |
251 | ><TR |
252 | ><TD |
253 | ALIGN="LEFT" |
254 | VALIGN="TOP" |
255 | ><TT |
256 | CLASS="STRUCTFIELD" |
257 | ><I |
258 | >jhat</I |
259 | ></TT |
260 | ></TD |
261 | ><TD |
262 | ALIGN="LEFT" |
263 | VALIGN="TOP" |
264 | ><A |
265 | HREF="sdljoyhatevent.html" |
266 | >Joystick hat motion event</A |
267 | ></TD |
268 | ></TR |
269 | ><TR |
270 | ><TD |
271 | ALIGN="LEFT" |
272 | VALIGN="TOP" |
273 | ><TT |
274 | CLASS="STRUCTFIELD" |
275 | ><I |
276 | >jbutton</I |
277 | ></TT |
278 | ></TD |
279 | ><TD |
280 | ALIGN="LEFT" |
281 | VALIGN="TOP" |
282 | ><A |
283 | HREF="sdljoybuttonevent.html" |
284 | >Joystick button event</A |
285 | ></TD |
286 | ></TR |
287 | ><TR |
288 | ><TD |
289 | ALIGN="LEFT" |
290 | VALIGN="TOP" |
291 | ><TT |
292 | CLASS="STRUCTFIELD" |
293 | ><I |
294 | >resize</I |
295 | ></TT |
296 | ></TD |
297 | ><TD |
298 | ALIGN="LEFT" |
299 | VALIGN="TOP" |
300 | ><A |
301 | HREF="sdlresizeevent.html" |
302 | >Application window resize event</A |
303 | ></TD |
304 | ></TR |
305 | ><TR |
306 | ><TD |
307 | ALIGN="LEFT" |
308 | VALIGN="TOP" |
309 | ><TT |
310 | CLASS="STRUCTFIELD" |
311 | ><I |
312 | >expose</I |
313 | ></TT |
314 | ></TD |
315 | ><TD |
316 | ALIGN="LEFT" |
317 | VALIGN="TOP" |
318 | ><A |
319 | HREF="sdlexposeevent.html" |
320 | >Application window expose event</A |
321 | ></TD |
322 | ></TR |
323 | ><TR |
324 | ><TD |
325 | ALIGN="LEFT" |
326 | VALIGN="TOP" |
327 | ><TT |
328 | CLASS="STRUCTFIELD" |
329 | ><I |
330 | >quit</I |
331 | ></TT |
332 | ></TD |
333 | ><TD |
334 | ALIGN="LEFT" |
335 | VALIGN="TOP" |
336 | ><A |
337 | HREF="sdlquitevent.html" |
338 | >Application quit request event</A |
339 | ></TD |
340 | ></TR |
341 | ><TR |
342 | ><TD |
343 | ALIGN="LEFT" |
344 | VALIGN="TOP" |
345 | ><TT |
346 | CLASS="STRUCTFIELD" |
347 | ><I |
348 | >user</I |
349 | ></TT |
350 | ></TD |
351 | ><TD |
352 | ALIGN="LEFT" |
353 | VALIGN="TOP" |
354 | ><A |
355 | HREF="sdluserevent.html" |
356 | >User defined event</A |
357 | ></TD |
358 | ></TR |
359 | ><TR |
360 | ><TD |
361 | ALIGN="LEFT" |
362 | VALIGN="TOP" |
363 | ><TT |
364 | CLASS="STRUCTFIELD" |
365 | ><I |
366 | >syswm</I |
367 | ></TT |
368 | ></TD |
369 | ><TD |
370 | ALIGN="LEFT" |
371 | VALIGN="TOP" |
372 | ><A |
373 | HREF="sdlsyswmevent.html" |
374 | >Undefined window manager event</A |
375 | ></TD |
376 | ></TR |
377 | ></TBODY |
378 | ></TABLE |
379 | ><P |
380 | ></P |
381 | ></DIV |
382 | ></DIV |
383 | ><DIV |
384 | CLASS="REFSECT1" |
385 | ><A |
386 | NAME="AEN3791" |
387 | ></A |
388 | ><H2 |
389 | >Description</H2 |
390 | ><P |
391 | >The <SPAN |
392 | CLASS="STRUCTNAME" |
393 | >SDL_Event</SPAN |
394 | > union is the core to all event handling is SDL, its probably the most important structure after <SPAN |
395 | CLASS="STRUCTNAME" |
396 | >SDL_Surface</SPAN |
397 | >. <SPAN |
398 | CLASS="STRUCTNAME" |
399 | >SDL_Event</SPAN |
400 | > is a union of all event structures used in SDL, using it is a simple matter of knowing which union member relates to which event <TT |
401 | CLASS="STRUCTFIELD" |
402 | ><I |
403 | >type</I |
404 | ></TT |
405 | >.</P |
406 | ><P |
407 | ><DIV |
408 | CLASS="INFORMALTABLE" |
409 | ><A |
410 | NAME="AEN3799" |
411 | ></A |
412 | ><P |
413 | ></P |
414 | ><TABLE |
415 | BORDER="1" |
416 | CLASS="CALSTABLE" |
417 | ><THEAD |
418 | ><TR |
419 | ><TH |
420 | ALIGN="LEFT" |
421 | VALIGN="TOP" |
422 | >Event <TT |
423 | CLASS="STRUCTFIELD" |
424 | ><I |
425 | >type</I |
426 | ></TT |
427 | ></TH |
428 | ><TH |
429 | ALIGN="LEFT" |
430 | VALIGN="TOP" |
431 | >Event Structure</TH |
432 | ></TR |
433 | ></THEAD |
434 | ><TBODY |
435 | ><TR |
436 | ><TD |
437 | ALIGN="LEFT" |
438 | VALIGN="MIDDLE" |
439 | ><TT |
440 | CLASS="LITERAL" |
441 | >SDL_ACTIVEEVENT</TT |
442 | ></TD |
443 | ><TD |
444 | ALIGN="LEFT" |
445 | VALIGN="MIDDLE" |
446 | ><A |
447 | HREF="sdlactiveevent.html" |
448 | ><SPAN |
449 | CLASS="STRUCTNAME" |
450 | >SDL_ActiveEvent</SPAN |
451 | ></A |
452 | ></TD |
453 | ></TR |
454 | ><TR |
455 | ><TD |
456 | ALIGN="LEFT" |
457 | VALIGN="TOP" |
458 | ><TT |
459 | CLASS="LITERAL" |
460 | >SDL_KEYDOWN/UP</TT |
461 | ></TD |
462 | ><TD |
463 | ALIGN="LEFT" |
464 | VALIGN="TOP" |
465 | ><A |
466 | HREF="sdlkeyboardevent.html" |
467 | ><SPAN |
468 | CLASS="STRUCTNAME" |
469 | >SDL_KeyboardEvent</SPAN |
470 | ></A |
471 | ></TD |
472 | ></TR |
473 | ><TR |
474 | ><TD |
475 | ALIGN="LEFT" |
476 | VALIGN="TOP" |
477 | ><TT |
478 | CLASS="LITERAL" |
479 | >SDL_MOUSEMOTION</TT |
480 | ></TD |
481 | ><TD |
482 | ALIGN="LEFT" |
483 | VALIGN="TOP" |
484 | ><A |
485 | HREF="sdlmousemotionevent.html" |
486 | ><SPAN |
487 | CLASS="STRUCTNAME" |
488 | >SDL_MouseMotionEvent</SPAN |
489 | ></A |
490 | ></TD |
491 | ></TR |
492 | ><TR |
493 | ><TD |
494 | ALIGN="LEFT" |
495 | VALIGN="TOP" |
496 | ><TT |
497 | CLASS="LITERAL" |
498 | >SDL_MOUSEBUTTONDOWN/UP</TT |
499 | ></TD |
500 | ><TD |
501 | ALIGN="LEFT" |
502 | VALIGN="TOP" |
503 | ><A |
504 | HREF="sdlmousebuttonevent.html" |
505 | ><SPAN |
506 | CLASS="STRUCTNAME" |
507 | >SDL_MouseButtonEvent</SPAN |
508 | ></A |
509 | ></TD |
510 | ></TR |
511 | ><TR |
512 | ><TD |
513 | ALIGN="LEFT" |
514 | VALIGN="TOP" |
515 | ><TT |
516 | CLASS="LITERAL" |
517 | >SDL_JOYAXISMOTION</TT |
518 | ></TD |
519 | ><TD |
520 | ALIGN="LEFT" |
521 | VALIGN="TOP" |
522 | ><A |
523 | HREF="sdljoyaxisevent.html" |
524 | ><SPAN |
525 | CLASS="STRUCTNAME" |
526 | >SDL_JoyAxisEvent</SPAN |
527 | ></A |
528 | ></TD |
529 | ></TR |
530 | ><TR |
531 | ><TD |
532 | ALIGN="LEFT" |
533 | VALIGN="TOP" |
534 | ><TT |
535 | CLASS="LITERAL" |
536 | >SDL_JOYBALLMOTION</TT |
537 | ></TD |
538 | ><TD |
539 | ALIGN="LEFT" |
540 | VALIGN="TOP" |
541 | ><A |
542 | HREF="sdljoyballevent.html" |
543 | ><SPAN |
544 | CLASS="STRUCTNAME" |
545 | >SDL_JoyBallEvent</SPAN |
546 | ></A |
547 | ></TD |
548 | ></TR |
549 | ><TR |
550 | ><TD |
551 | ALIGN="LEFT" |
552 | VALIGN="TOP" |
553 | ><TT |
554 | CLASS="LITERAL" |
555 | >SDL_JOYHATMOTION</TT |
556 | ></TD |
557 | ><TD |
558 | ALIGN="LEFT" |
559 | VALIGN="TOP" |
560 | ><A |
561 | HREF="sdljoyhatevent.html" |
562 | ><SPAN |
563 | CLASS="STRUCTNAME" |
564 | >SDL_JoyHatEvent</SPAN |
565 | ></A |
566 | ></TD |
567 | ></TR |
568 | ><TR |
569 | ><TD |
570 | ALIGN="LEFT" |
571 | VALIGN="TOP" |
572 | ><TT |
573 | CLASS="LITERAL" |
574 | >SDL_JOYBUTTONDOWN/UP</TT |
575 | ></TD |
576 | ><TD |
577 | ALIGN="LEFT" |
578 | VALIGN="TOP" |
579 | ><A |
580 | HREF="sdljoybuttonevent.html" |
581 | ><SPAN |
582 | CLASS="STRUCTNAME" |
583 | >SDL_JoyButtonEvent</SPAN |
584 | ></A |
585 | ></TD |
586 | ></TR |
587 | ><TR |
588 | ><TD |
589 | ALIGN="LEFT" |
590 | VALIGN="TOP" |
591 | ><TT |
592 | CLASS="LITERAL" |
593 | >SDL_QUIT</TT |
594 | ></TD |
595 | ><TD |
596 | ALIGN="LEFT" |
597 | VALIGN="TOP" |
598 | ><A |
599 | HREF="sdlquitevent.html" |
600 | ><SPAN |
601 | CLASS="STRUCTNAME" |
602 | >SDL_QuitEvent</SPAN |
603 | ></A |
604 | ></TD |
605 | ></TR |
606 | ><TR |
607 | ><TD |
608 | ALIGN="LEFT" |
609 | VALIGN="TOP" |
610 | ><TT |
611 | CLASS="LITERAL" |
612 | >SDL_SYSWMEVENT</TT |
613 | ></TD |
614 | ><TD |
615 | ALIGN="LEFT" |
616 | VALIGN="TOP" |
617 | ><A |
618 | HREF="sdlsyswmevent.html" |
619 | ><SPAN |
620 | CLASS="STRUCTNAME" |
621 | >SDL_SysWMEvent</SPAN |
622 | ></A |
623 | ></TD |
624 | ></TR |
625 | ><TR |
626 | ><TD |
627 | ALIGN="LEFT" |
628 | VALIGN="TOP" |
629 | ><TT |
630 | CLASS="LITERAL" |
631 | >SDL_VIDEORESIZE</TT |
632 | ></TD |
633 | ><TD |
634 | ALIGN="LEFT" |
635 | VALIGN="TOP" |
636 | ><A |
637 | HREF="sdlresizeevent.html" |
638 | ><SPAN |
639 | CLASS="STRUCTNAME" |
640 | >SDL_ResizeEvent</SPAN |
641 | ></A |
642 | ></TD |
643 | ></TR |
644 | ><TR |
645 | ><TD |
646 | ALIGN="LEFT" |
647 | VALIGN="TOP" |
648 | ><TT |
649 | CLASS="LITERAL" |
650 | >SDL_VIDEOEXPOSE</TT |
651 | ></TD |
652 | ><TD |
653 | ALIGN="LEFT" |
654 | VALIGN="TOP" |
655 | ><A |
656 | HREF="sdlexposeevent.html" |
657 | ><SPAN |
658 | CLASS="STRUCTNAME" |
659 | >SDL_ExposeEvent</SPAN |
660 | ></A |
661 | ></TD |
662 | ></TR |
663 | ><TR |
664 | ><TD |
665 | ALIGN="LEFT" |
666 | VALIGN="TOP" |
667 | ><TT |
668 | CLASS="LITERAL" |
669 | >SDL_USEREVENT</TT |
670 | ></TD |
671 | ><TD |
672 | ALIGN="LEFT" |
673 | VALIGN="TOP" |
674 | ><A |
675 | HREF="sdluserevent.html" |
676 | ><SPAN |
677 | CLASS="STRUCTNAME" |
678 | >SDL_UserEvent</SPAN |
679 | ></A |
680 | ></TD |
681 | ></TR |
682 | ></TBODY |
683 | ></TABLE |
684 | ><P |
685 | ></P |
686 | ></DIV |
687 | ></P |
688 | ></DIV |
689 | ><DIV |
690 | CLASS="REFSECT1" |
691 | ><A |
692 | NAME="AEN3885" |
693 | ></A |
694 | ><H2 |
695 | >Use</H2 |
696 | ><P |
697 | >The <SPAN |
698 | CLASS="STRUCTNAME" |
699 | >SDL_Event</SPAN |
700 | > structure has two uses</P |
701 | ><P |
702 | ></P |
703 | ><UL |
704 | COMPACT="COMPACT" |
705 | ><LI |
706 | ><P |
707 | >Reading events on the event queue</P |
708 | ></LI |
709 | ><LI |
710 | ><P |
711 | >Placing events on the event queue</P |
712 | ></LI |
713 | ></UL |
714 | ><P |
715 | >Reading events from the event queue is done with either <A |
716 | HREF="sdlpollevent.html" |
717 | ><TT |
718 | CLASS="FUNCTION" |
719 | >SDL_PollEvent</TT |
720 | ></A |
721 | > or <A |
722 | HREF="sdlpeepevents.html" |
723 | ><TT |
724 | CLASS="FUNCTION" |
725 | >SDL_PeepEvents</TT |
726 | ></A |
727 | >. We'll use <TT |
728 | CLASS="FUNCTION" |
729 | >SDL_PollEvent</TT |
730 | > and step through an example.</P |
731 | ><P |
732 | >First off, we create an empty <SPAN |
733 | CLASS="STRUCTNAME" |
734 | >SDL_Event</SPAN |
735 | > structure. |
736 | <PRE |
737 | CLASS="PROGRAMLISTING" |
738 | >SDL_Event test_event;</PRE |
739 | > |
740 | <TT |
741 | CLASS="FUNCTION" |
742 | >SDL_PollEvent</TT |
743 | > removes the next event from the event queue, if there are no events on the queue it returns <SPAN |
744 | CLASS="RETURNVALUE" |
745 | >0</SPAN |
746 | > otherwise it returns <SPAN |
747 | CLASS="RETURNVALUE" |
748 | >1</SPAN |
749 | >. We use a <TT |
750 | CLASS="FUNCTION" |
751 | >while</TT |
752 | > loop to process each event in turn. |
753 | <PRE |
754 | CLASS="PROGRAMLISTING" |
755 | >while(SDL_PollEvent(&test_event)) {</PRE |
756 | > |
757 | The <TT |
758 | CLASS="FUNCTION" |
759 | >SDL_PollEvent</TT |
760 | > function take a pointer to an <SPAN |
761 | CLASS="STRUCTNAME" |
762 | >SDL_Event</SPAN |
763 | > structure that is to be filled with event information. We know that if <TT |
764 | CLASS="FUNCTION" |
765 | >SDL_PollEvent</TT |
766 | > removes an event from the queue then the event information will be placed in our <SPAN |
767 | CLASS="STRUCTNAME" |
768 | >test_event</SPAN |
769 | > structure, but we also know that the <SPAN |
770 | CLASS="emphasis" |
771 | ><I |
772 | CLASS="EMPHASIS" |
773 | >type</I |
774 | ></SPAN |
775 | > of event will be placed in the <TT |
776 | CLASS="STRUCTFIELD" |
777 | ><I |
778 | >type</I |
779 | ></TT |
780 | > member of <SPAN |
781 | CLASS="STRUCTNAME" |
782 | >test_event</SPAN |
783 | >. So to handle each event <TT |
784 | CLASS="STRUCTFIELD" |
785 | ><I |
786 | >type</I |
787 | ></TT |
788 | > seperately we use a <TT |
789 | CLASS="FUNCTION" |
790 | >switch</TT |
791 | > statement. |
792 | <PRE |
793 | CLASS="PROGRAMLISTING" |
794 | > switch(test_event.type) {</PRE |
795 | > |
796 | We need to know what kind of events we're looking for <SPAN |
797 | CLASS="emphasis" |
798 | ><I |
799 | CLASS="EMPHASIS" |
800 | >and</I |
801 | ></SPAN |
802 | > the event <TT |
803 | CLASS="STRUCTFIELD" |
804 | ><I |
805 | >type</I |
806 | ></TT |
807 | >'s of those events. So lets assume we want to detect where the user is moving the mouse pointer within our application. We look through our event types and notice that <TT |
808 | CLASS="LITERAL" |
809 | >SDL_MOUSEMOTION</TT |
810 | > is, more than likely, the event we're looking for. A little <A |
811 | HREF="sdlmousemotionevent.html" |
812 | >more</A |
813 | > research tells use that <TT |
814 | CLASS="LITERAL" |
815 | >SDL_MOUSEMOTION</TT |
816 | > events are handled within the <A |
817 | HREF="sdlmousemotionevent.html" |
818 | ><SPAN |
819 | CLASS="STRUCTNAME" |
820 | >SDL_MouseMotionEvent</SPAN |
821 | ></A |
822 | > structure which is the <TT |
823 | CLASS="STRUCTFIELD" |
824 | ><I |
825 | >motion</I |
826 | ></TT |
827 | > member of <SPAN |
828 | CLASS="STRUCTNAME" |
829 | >SDL_Event</SPAN |
830 | >. We can check for the <TT |
831 | CLASS="LITERAL" |
832 | >SDL_MOUSEMOTION</TT |
833 | > event <TT |
834 | CLASS="STRUCTFIELD" |
835 | ><I |
836 | >type</I |
837 | ></TT |
838 | > within our <TT |
839 | CLASS="FUNCTION" |
840 | >switch</TT |
841 | > statement like so: |
842 | <PRE |
843 | CLASS="PROGRAMLISTING" |
844 | > case SDL_MOUSEMOTION:</PRE |
845 | > |
846 | All we need do now is read the information out of the <TT |
847 | CLASS="STRUCTFIELD" |
848 | ><I |
849 | >motion</I |
850 | ></TT |
851 | > member of <SPAN |
852 | CLASS="STRUCTNAME" |
853 | >test_event</SPAN |
854 | >. |
855 | <PRE |
856 | CLASS="PROGRAMLISTING" |
857 | > printf("We got a motion event.\n"); |
858 | printf("Current mouse position is: (%d, %d)\n", test_event.motion.x, test_event.motion.y); |
859 | break; |
860 | default: |
861 | printf("Unhandled Event!\n"); |
862 | break; |
863 | } |
864 | } |
865 | printf("Event queue empty.\n");</PRE |
866 | ></P |
867 | ><P |
868 | >It is also possible to push events onto the event queue and so use it as a two-way communication path. Both <A |
869 | HREF="sdlpushevent.html" |
870 | ><TT |
871 | CLASS="FUNCTION" |
872 | >SDL_PushEvent</TT |
873 | ></A |
874 | > and <A |
875 | HREF="sdlpeepevents.html" |
876 | ><TT |
877 | CLASS="FUNCTION" |
878 | >SDL_PeepEvents</TT |
879 | ></A |
880 | > allow you to place events onto the event queue. This is usually used to place a <TT |
881 | CLASS="LITERAL" |
882 | >SDL_USEREVENT</TT |
883 | > on the event queue, however you could use it to post fake input events if you wished. Creating your own events is a simple matter of choosing the event type you want, setting the <TT |
884 | CLASS="STRUCTFIELD" |
885 | ><I |
886 | >type</I |
887 | ></TT |
888 | > member and filling the appropriate member structure with information. |
889 | <PRE |
890 | CLASS="PROGRAMLISTING" |
891 | >SDL_Event user_event; |
892 | |
893 | user_event.type=SDL_USEREVENT; |
894 | user_event.user.code=2; |
895 | user_event.user.data1=NULL; |
896 | user_event.user.data2=NULL; |
897 | SDL_PushEvent(&user_event);</PRE |
898 | ></P |
899 | ></DIV |
900 | ><DIV |
901 | CLASS="REFSECT1" |
902 | ><A |
903 | NAME="AEN3942" |
904 | ></A |
905 | ><H2 |
906 | >See Also</H2 |
907 | ><P |
908 | ><A |
909 | HREF="sdlpollevent.html" |
910 | ><TT |
911 | CLASS="FUNCTION" |
912 | >SDL_PollEvent</TT |
913 | ></A |
914 | >, |
915 | <A |
916 | HREF="sdlpushevent.html" |
917 | ><TT |
918 | CLASS="FUNCTION" |
919 | >SDL_PushEvent</TT |
920 | ></A |
921 | >, |
922 | <A |
923 | HREF="sdlpeepevents.html" |
924 | ><TT |
925 | CLASS="FUNCTION" |
926 | >SDL_PeepEvents</TT |
927 | ></A |
928 | ></P |
929 | ></DIV |
930 | ><DIV |
931 | CLASS="NAVFOOTER" |
932 | ><HR |
933 | ALIGN="LEFT" |
934 | WIDTH="100%"><TABLE |
935 | SUMMARY="Footer navigation table" |
936 | WIDTH="100%" |
937 | BORDER="0" |
938 | CELLPADDING="0" |
939 | CELLSPACING="0" |
940 | ><TR |
941 | ><TD |
942 | WIDTH="33%" |
943 | ALIGN="left" |
944 | VALIGN="top" |
945 | ><A |
946 | HREF="eventstructures.html" |
947 | ACCESSKEY="P" |
948 | >Prev</A |
949 | ></TD |
950 | ><TD |
951 | WIDTH="34%" |
952 | ALIGN="center" |
953 | VALIGN="top" |
954 | ><A |
955 | HREF="index.html" |
956 | ACCESSKEY="H" |
957 | >Home</A |
958 | ></TD |
959 | ><TD |
960 | WIDTH="33%" |
961 | ALIGN="right" |
962 | VALIGN="top" |
963 | ><A |
964 | HREF="sdlactiveevent.html" |
965 | ACCESSKEY="N" |
966 | >Next</A |
967 | ></TD |
968 | ></TR |
969 | ><TR |
970 | ><TD |
971 | WIDTH="33%" |
972 | ALIGN="left" |
973 | VALIGN="top" |
974 | >SDL Event Structures.</TD |
975 | ><TD |
976 | WIDTH="34%" |
977 | ALIGN="center" |
978 | VALIGN="top" |
979 | ><A |
980 | HREF="eventstructures.html" |
981 | ACCESSKEY="U" |
982 | >Up</A |
983 | ></TD |
984 | ><TD |
985 | WIDTH="33%" |
986 | ALIGN="right" |
987 | VALIGN="top" |
988 | >SDL_ActiveEvent</TD |
989 | ></TR |
990 | ></TABLE |
991 | ></DIV |
992 | ></BODY |
993 | ></HTML |
994 | > |