Page 1 of 1

injectKeyDown with WM_KEYDOWN messages

Posted: Fri Dec 15, 2006 00:11
by Bob
I am using Win32 messages to inject input into CEGUI. Everything works fine except for non alphanumeric characters. So I assume there is something wrong with my call to injectKeyDown/injectKeyUp. The documentation says that it takes the scan code. To get the scan code I use the Win32 function MapVirtualKey. Not sure what the problem is. Any ideas?

Code: Select all

while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
   TranslateMessage(&msg);
   switch(msg.message)
   {
      case WM_MOUSEMOVE:
         CEGUI::System::getSingleton().injectMousePosition(LOWORD(msg.lParam),HIWORD(msg.lParam));
         break;
      case WM_KEYDOWN:
         if(msg.wParam==VK_ESCAPE)
            run=false;
         CEGUI::System::getSingleton().injectKeyDown(MapVirtualKey(msg.wParam,0));
         break;
      case WM_KEYUP:
         CEGUI::System::getSingleton().injectKeyUp(MapVirtualKey(msg.wParam,0));
         break;
      case WM_CHAR:
         CEGUI::System::getSingleton().injectChar(msg.wParam);
         break;
      case WM_LBUTTONDOWN:
         CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::MouseButton::LeftButton);
         break;
      case WM_LBUTTONUP:
         CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::MouseButton::LeftButton);
         break;
      case WM_RBUTTONDOWN:
         CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::MouseButton::RightButton);
         break;
      case WM_RBUTTONUP:
         CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::MouseButton::RightButton);
         break;
      case WM_MBUTTONDOWN:
         CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::MouseButton::MiddleButton);
         break;
      case WM_MBUTTONUP:
         CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::MouseButton::MiddleButton);
         break;
      case WM_MOUSEWHEEL:
         CEGUI::System::getSingleton().injectMouseWheelChange(GET_WHEEL_DELTA_WPARAM(msg.wParam));
         break;
      case WM_MOUSELEAVE:
         CEGUI::System::getSingleton().injectMouseLeaves();
         break;
      default:
         break;
   }
   DispatchMessage(&msg);
}

Posted: Fri Dec 15, 2006 04:31
by Rackle

Posted: Fri Dec 15, 2006 16:37
by Bob
Thank you!