Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Debalance от 29-03-2018, 11:39:02

Название: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 29-03-2018, 11:39:02
Есть необходимость принудительно прервать (ну, положим, в таймере) работу acedGetPoint. Как корректно это сделать?
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Александр Ривилис от 29-03-2018, 11:51:48
Боюсь, что никак. Особенно в последних версиях AutoCAD. Можно попытаться послать ::SendMessage(WM_KEYDOWN, VK_ESCAPE, ...) но боюсь, что это не поможет.
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 29-03-2018, 12:00:29
Боюсь, что никак...
Жаль. Будем менять концепцию....
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Александр Ривилис от 29-03-2018, 12:01:54
Жаль. Будем менять концепцию....
А в чем смысл прерывать запрос ввода пользователем точки?
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 29-03-2018, 12:44:36
А в чем смысл...
Смысл в альтернативном завершении работы программы. Как бы предусматривается два варианта данного действия:
 1. Пользователь классически выходит из acedGetPoint.
 2. Пользователь (в момент указания точки) закрывает сопутствующее немодальное диалоговое окно.
Второй пункт вызывает вопросы.
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Александр Ривилис от 29-03-2018, 13:17:08
2. Пользователь (в момент указания точки) закрывает сопутствующее немодальное диалоговое окно.
Второй пункт вызывает вопросы.
Блокировать закрытие окна в момент запроса от пользователя.
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 29-03-2018, 13:31:18
Блокировать закрытие окна в момент запроса от пользователя.
Да, согласен - это первое что приходит на ум.
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Александр Ривилис от 29-03-2018, 13:33:55
Блокировать закрытие окна в момент запроса от пользователя.
Да, согласен - это первое что приходит на ум.
И это самое естественное поведение. Возможно даже прятать окно на время запросов типа acedGetXXX.
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 29-03-2018, 13:42:12
Возможно даже прятать окно на время запросов типа acedGetXXX.
Здесь замысел в другом - сбор и отображение оперативной информации в момент "пролёта над гнездом кукушки".
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Александр Ривилис от 29-03-2018, 13:47:38
Возможно даже прятать окно на время запросов типа acedGetXXX.
Здесь замысел в другом - сбор и отображение оперативной информации в момент "пролёта над гнездом кукушки".
Ну тогда в AcEdInputContextReactor::beginGetPoint следует блокировать это окно от закрытия, а в AcEdInputContextReactor::endGetPoint снимать блокировку: https://blogs.msdn.microsoft.com/oldnewthing/20100604-00/?p=13803
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 29-03-2018, 14:06:39
https://blogs.msdn.microsoft.com/oldnewthing/20100604-00/?p=13803
Полезная ссылка. Благодарствую.
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 05-07-2018, 11:05:01
Попробовал, как вариант:
Код - C++ [Выбрать]
  1. acDocManager->sendStringToExecute(acDocManager->curDocument(), L"\x3", false, true, false);
Отлично работает для моего случая.
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Александр Ривилис от 05-07-2018, 11:15:27
Попробовал, как вариант:
Код - C++ [Выбрать]
  1. acDocManager->sendStringToExecute(acDocManager->curDocument(), L"\x3", false, true, false);
Отлично работает для моего случая.
Проверял во всех версиях AutoCAD?
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Debalance от 05-07-2018, 11:17:10
Проверял во всех версиях AutoCAD?
Пока только в одной версии: 2016. Возможны подводные камни?
Название: Re: Принудительно прервать работу acedGetPoint
Отправлено: Александр Ривилис от 05-07-2018, 11:25:24
Возможны подводные камни?
Да.