PMG
https://forum.pmg.org.ru/

Использование клавы
https://forum.pmg.org.ru/viewtopic.php?f=1&t=6727
Страница 1 из 1

Автор:  Ipkis [ 02 дек 2008 13:20 ]
Заголовок сообщения:  Использование клавы

Помогите!!!
Не могу понять :oops:!
При использовании управ. клавиш - все нормально(e.g.F1), а когда использую символьные клавиши - реакция 0 :( .
Куда я только не вставлял функцю обработки клавы ;)

Автор:  MagicWolf [ 02 дек 2008 16:58 ]
Заголовок сообщения:  Re: Использование клавы

По подробнее плиз, и код ...

Автор:  Ipkis [ 05 дек 2008 13:03 ]
Заголовок сообщения:  Re: Использование клавы

Подробнее...
Просто необходимость использовать не только функцю
клавиши =)!
По поводу кода - я не блестал оригинальностью...
Основной цикл проги и все установки взят из уроков NeHe, а так же обработка клавиатуры-она идентична урокам (за что я им черезмерно благодарен ! ;) ):
Код:
…      
if (PeekMessage (&msg, m_Wnd.hWnd, 0, 0, PM_REMOVE) != 0)
{
   if (msg.message != WM_QUIT)   
   {
      DispatchMessage (&msg);   
   }
   else                  
   {
      isMessagePumpActive = FALSE;   
   }
}
else                           
{
   if (m_Wnd.bisVisible == FALSE)      
   {
      WaitMessage();               
   }
   else                        
   {
      //По примерам снычала сдесь исользовал функцию обработки клавы – ни какой реакции
      KeyEvents(&m_Wnd);
      DrawGLScene();
      SwapBuffers(m_Wnd.hDC);      
   }
}


Затем я вызывал функцию обработки клавы из самой функции рисования DrawGLScene() – опять управ. клавиши обрабатываются, а остальные – нет.
DrawGLScene():
Код:
...
glRotatef(по X);
glRotatef(по X);
Отрисовка карты высот - использовал код Focus on 3D Terrian
KeyEvents();


Cама функция обработки клавы оригинальностью не блещет:
Код:
void KeyEvents(LPViewPortWnd lpWind)
{
   if (lpWind->keyDown[VK_ESCAPE])
      TerminateApplication(lpWind);
   if (lpWind->keyDown[VK_PRIOR])
   { m_Camera.m_vecEyePos -= m_Camera.m_vecForward*Speed;
   }
   if (lpWind->keyDown[VK_NEXT])
   { m_Camera.m_vecEyePos += m_Camera.m_vecForward*Speed;
   }
   if (lpWind->keyDown[VK_UP])
      fRotX -= 1.5;
   if (lpWind->keyDown[VK_DOWN])
      fRotX += 1.5;
   if (lpWind->keyDown[VK_LEFT])
      fRotY -= 1.5;
   //if (lpWind->keyDown[VK_RIGHT])
   //   fRotY += 1.5;
   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   if (lpWind->keyDown[‘a’]) – на такой код реакции ни какой
      fRotY += 1.5;

}

Да и в функции обработки событий (опять же по NeHe!) предусмотрено использование символьных клавиш:
Код:


case WM_KEYDOWN:
if ((wParam >= 0) && (wParam <= 255))
{
window->keyDown[wParam] = TRUE;
return 0;
}
break;
case WM_KEYUP:
if ((wParam >= 0) && (wParam <= 255))
{
window->keyDown [wParam] = FALSE;
return 0;
}
break;


[/code]

Автор:  MagicWolf [ 08 дек 2008 09:45 ]
Заголовок сообщения:  Re: Использование клавы

У тебя ‘a’ - случайно не в unicode или русское? Используй числовой код.

Автор:  Ipkis [ 08 дек 2008 16:02 ]
Заголовок сообщения:  Re: Использование клавы

Не не русское и не unicode. А числовой код попробуем. Спасибо!

Автор:  MagicWolf [ 08 дек 2008 17:50 ]
Заголовок сообщения:  Re: Использование клавы

Может у тебя ‘a’ воспринимается как unicode? Проследи в case WM_KEYDOWN: что нажимается и запомни нужные коды ...

Автор:  Ipkis [ 10 дек 2008 12:57 ]
Заголовок сообщения:  Re: Использование клавы

Ну, что тут можно сказать: пути Microsoft не исповедимы! :D
VC++.NET 2005 воспренимает символы как ANSI. Вариант с числовым кодом прошел, спасибо. А VC++ 6 прохавала и символьный вариант...

Автор:  bad_duck [ 12 май 2009 20:06 ]
Заголовок сообщения:  Re: Использование клавы

если кому надо писать через буквы, а не через код, то правильно писать keyDown['A'] вместо keyDown['a']

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/