26/09/2013
Как реагировать на клавиши курсора (без передачи их в AutoCAD) используя ObjectARX?
В ObjectARX вы можете добавить фильтр в функцию обработки окна AutoCAD (можно использовать PInvoke для использования этой функциональности в .NET).
Следующий пример показывает как можно перехватывать и фильтровать клавиши и не позволить AutoCAD’у обрабатывать эти клавиши в командной строке (возвращая TRUE из filterCurs()). Он использует функцию acedRegisterFilterWinMsg() для регистрации хука и функцию acedRemoveFilterWinMsg() для отказа от регистрации хука...
Код - C++: [Выделить]
- #include "rxmfcapi.h"
- static BOOL cursDone = FALSE;
- // После вызова этой функции AutoCAD будет использовать
- // функцию filterCurs() для обработки нажатия клавиш.
- //-----------------------------------------------------------------
- void curskeys()
- {
- if( TRUE == cursDone ) // Хук установлен??
- return;
- acutPrintf( _T("Фильтрация клавиш включена...\n") );
- if( FALSE == acedRegisterFilterWinMsg( filterCurs ) )
- acutPrintf( _T("Не могу зарегистрировать хук обработки клавиатуры!\n"));
- else
- cursDone = TRUE;
- }
- // Прекращение использования filterCurs() для обработки клавиш
- //------------------------------------------------------------------
- void nocurskeys()
- {
- if( TRUE == cursDone )
- {
- acedRemoveFilterWinMsg( filterCurs );
- cursDone = FALSE;
- }
- }
- // В этой функции ваше приложение может управлять обработкой
- // нажатий некоторых клавиш или оставить их обработку AutoCAD.
- //-------------------------------------------------------------------
- BOOL filterCurs( MSG *pMsg )
- {
- if( WM_KEYDOWN == pMsg->message && pMsg->wParam >= 37 && pMsg->wParam <= 40 )
- {
- switch( pMsg->wParam )
- {
- case 37: // Влево
- acutPrintf( _T("Влево\n") );
- break;
- case 38: // Вверх
- acutPrintf( _T("Вверх\n") );
- break;
- case 39: // Вправо
- acutPrintf( _T("Вправо\n") );
- break;
- case 40: // Вниз
- acutPrintf( _T("Вниз\n") );
- break;
- }
- return TRUE; // Отфильтровываем сообщения
- }
- return FALSE;
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=230
Опубликовано 26.09.2013