PMG https://forum.pmg.org.ru/ |
|
Использование клавы https://forum.pmg.org.ru/viewtopic.php?f=1&t=6727 |
Страница 1 из 1 |
Автор: | Ipkis [ 02 дек 2008 13:20 ] |
Заголовок сообщения: | Использование клавы |
Помогите!!! Не могу понять ! При использовании управ. клавиш - все нормально(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 не исповедимы! 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/ |