checkkeys.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* Simple program:  Loop, watching keystrokes
  2.    Note that you need to call SDL_PollEvent() or SDL_WaitEvent() to 
  3.    pump the event loop and catch keystrokes.
  4. */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include "SDL.h"
  9. static void print_modifiers(void)
  10. {
  11. int mod;
  12. printf(" modifiers:");
  13. mod = SDL_GetModState();
  14. if(!mod) {
  15. printf(" (none)");
  16. return;
  17. }
  18. if(mod & KMOD_LSHIFT)
  19. printf(" LSHIFT");
  20. if(mod & KMOD_RSHIFT)
  21. printf(" RSHIFT");
  22. if(mod & KMOD_LCTRL)
  23. printf(" LCTRL");
  24. if(mod & KMOD_RCTRL)
  25. printf(" RCTRL");
  26. if(mod & KMOD_LALT)
  27. printf(" LALT");
  28. if(mod & KMOD_RALT)
  29. printf(" RALT");
  30. if(mod & KMOD_LMETA)
  31. printf(" LMETA");
  32. if(mod & KMOD_RMETA)
  33. printf(" RMETA");
  34. if(mod & KMOD_NUM)
  35. printf(" NUM");
  36. if(mod & KMOD_CAPS)
  37. printf(" CAPS");
  38. if(mod & KMOD_MODE)
  39. printf(" MODE");
  40. }
  41. static void PrintKey(SDL_keysym *sym, int pressed)
  42. {
  43. /* Print the keycode, name and state */
  44. if ( sym->sym ) {
  45. printf("Key %s:  %d-%s ", pressed ?  "pressed" : "released",
  46. sym->sym, SDL_GetKeyName(sym->sym));
  47. } else {
  48. printf("Unknown Key (scancode = %d) %s ", sym->scancode,
  49. pressed ?  "pressed" : "released");
  50. }
  51. /* Print the translated character, if one exists */
  52. if ( sym->unicode ) {
  53. /* Is it a control-character? */
  54. if ( sym->unicode < ' ' ) {
  55. printf(" (^%c)", sym->unicode+'@');
  56. } else {
  57. #ifdef UNICODE
  58. printf(" (%c)", sym->unicode);
  59. #else
  60. /* This is a Latin-1 program, so only show 8-bits */
  61. if ( !(sym->unicode & 0xFF00) )
  62. printf(" (%c)", sym->unicode);
  63. #endif
  64. }
  65. }
  66. print_modifiers();
  67. printf("n");
  68. }
  69. int main(int argc, char *argv[])
  70. {
  71. SDL_Event event;
  72. int done;
  73. /* Initialize SDL */
  74. if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
  75. fprintf(stderr, "Couldn't initialize SDL: %sn",SDL_GetError());
  76. exit(1);
  77. }
  78. atexit(SDL_Quit);
  79. /* Set 640x480 video mode */
  80. if ( SDL_SetVideoMode(640, 480, 0, SDL_SWSURFACE) == NULL ) {
  81. fprintf(stderr, "Couldn't set 640x480 video mode: %sn",
  82. SDL_GetError());
  83. exit(2);
  84. }
  85. /* Enable UNICODE translation for keyboard input */
  86. SDL_EnableUNICODE(1);
  87. /* Enable auto repeat for keyboard input */
  88. SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,
  89.                     SDL_DEFAULT_REPEAT_INTERVAL);
  90. /* Watch keystrokes */
  91. done = 0;
  92. while ( !done ) {
  93. /* Check for events */
  94. SDL_WaitEvent(&event);
  95. switch (event.type) {
  96. case SDL_KEYDOWN:
  97. PrintKey(&event.key.keysym, 1);
  98. break;
  99. case SDL_KEYUP:
  100. PrintKey(&event.key.keysym, 0);
  101. break;
  102. case SDL_MOUSEBUTTONDOWN:
  103. /* Any button press quits the app... */
  104. case SDL_QUIT:
  105. done = 1;
  106. break;
  107. default:
  108. break;
  109. }
  110. }
  111. return(0);
  112. }