tags:

views:

472

answers:

1

I am completely stumped as to why this code does not get any SDL keypress events. The other SDL events (removed for clarity) work fine. It does not work on my XP or Vista machines. No compile/link errors, just never recieve a keydown event.

#include "SDL/SDL.h"
// Yes SDL.lib and SDLmain.lib are linked

Uint32 TimeLeft(void)
{
 static Uint32 next_time = 0;
 Uint32 now;
 now = SDL_GetTicks();
 if ( next_time <= now ) {
  next_time = now + tickInterval;
  return 0;
 }
 return(next_time-now);
}

int main( int argc, char **argv )
{
 if( -1 == SDL_Init( SDL_INIT_EVERYTHING ) )
 {
  cerr << "Error: SDL_Init failed" << endl;
  return -1;
 }

 SDL_Event event;

 bool quit = false;

 while( !quit )
 {
  while( SDL_PollEvent( &event ) )
  {
   switch( event.type )
   {
   case SDL_KEYDOWN:
    switch( event.key.keysym.sym )
    {
    case SDLK_ESCAPE:
    case SDLK_q:
     quit = true;
     break;
    default:
     break;
    }
    break;
   case SDL_JOYAXISMOTION:
    // stuff removed
    break;
   case SDL_QUIT:
    quit = true;
    break;
   default:
    break;
   }
  }
  SDL_Delay( TimeLeft() );
 }

 SDL_Quit();

 return 0;
}
+1  A: 

You'll need to create a window with SDL_SetVideoMode to get mouse and keyboard events.

I don't think you'll have luck trying to SDL_WM_GrabInput the mouse and keyboard without a window. It may also raise security alerts the first time on moderm Windows machines.

Peter Shinners
Thanks, I knew it was some obvious thing I was overlooking.
Brian Paden