Я пишу плагин AutoCAD, который использует C ++ с платформой Microsoft Foundation Classes (MF C), и связываю исходную библиотеку ObjectARX, связанную с AutoCAD, которая помогает мне интегрировать мой плагин с собственным кодом AutoCAD.
В настоящее время у меня возникает проблема, из-за которой я не могу перехватить Windows Сообщения, которые создаются при использовании жестов сенсорного экрана, таких как пинч, масштабирование или панорамирование.
Это пример метода перехвата, который я реализовал ниже. Я могу получать практически все события мыши (щелчок левой кнопкой мыши вниз, щелчок левой кнопкой мыши вверх, колесико мыши, щелчок правой кнопкой мыши, двойной щелчок и т. Д. c.). Проблема заключается в том, что когда я использую свои пальцы на сенсорном экране для выполнения таких жестов, как сжатие и масштабирование или панорамирование двумя пальцами, сообщения Windows не передаются на этот крючок. Я бы предположил, что сообщения WM_GESTURE или WM_TOUCH также были бы перехвачены этим хуком.
Однако окно основного фрейма AutoCAD с рисунком в нем все еще реагирует на эти жестовые действия, которые я выполняю. Т.е. я могу использовать встроенные функции AutoCAD для масштабирования и панорамирования, пока я зажимаю, масштабирую и панорамирую пальцами. Теперь у меня проблема в том, что у меня нет возможности перехватить или изменить эти события жестов в случае, если мне нужно либо заблокировать, либо изменить эту функциональность по умолчанию.
BOOL WindowsMessageHook(MSG *pMsg)
{
if (pMsg->message == WM_LBUTTONDOWN)
{
//Got Left Click (This works!)
}
else if (pMsg->message == WM_TOUCH)
{
//Try to intercept WM_TOUCH (Doesn't work)
return TRUE;
}
else if (pMsg->message == WM_GESTURE)
{
//Try to intercept WM_GESTURE (Doesn't work)
return TRUE;
}
return FALSE;
}
В отдельном вызываемом методе, У меня есть эта строка кода, которая зарегистрирует ловушку с ObjectARX.
acedRegisterFilterWinMsg(WindowsMessageHook);
Я попытался написать некоторый код, который имитирует прозрачное окно для перехвата Windows сообщений (как я видел, предложенный другим, спрашивающим похожие вопросы). К сожалению, по крайней мере из кода, который я пробовал, я все еще не смог перехватить эти типы Windows сообщений (WM_GESTURE / WM_TOUCH).
Теперь мне интересно, есть ли что-то особенное или особенное, что мне нужно сделать для того, чтобы получить эти сообщения. Или, может быть, я просто принципиально не понимаю что-то и иду совершенно неверным путем к решению этой проблемы.
Еще одна потенциальная идея решения, которая пришла мне в голову, заключалась в том, чтобы найти способ переопределить основной кадр AutoCAD "Wnd" (окно) класс и переопределить метод "WndPro c", в частности, как я видел другие подобные предложения в Интернете. Проблема в том, что я не совсем уверен, как go делать это правильно с ObjectARX. Я полагаю, что для получения окна основного фрейма вы используете следующую строчку кода ниже.
CMDIFrameWnd* acadWindowFrame = acedGetAcadFrame();
Примечание: я нацеливаюсь только на Windows 10 машин.
Любое понимание или помощь чрезвычайно Я был очень признателен, когда пытался разобраться с этой проблемой, и в этот момент мне просто кажется, что я зря теряю время.
Большое вам спасибо за ваше время и усилия.