Принудительно прервать работу acedGetPoint

Автор Тема: Принудительно прервать работу acedGetPoint  (Прочитано 5658 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Есть необходимость принудительно прервать (ну, положим, в таймере) работу acedGetPoint. Как корректно это сделать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Боюсь, что никак. Особенно в последних версиях AutoCAD. Можно попытаться послать ::SendMessage(WM_KEYDOWN, VK_ESCAPE, ...) но боюсь, что это не поможет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Боюсь, что никак...
Жаль. Будем менять концепцию....

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Жаль. Будем менять концепцию....
А в чем смысл прерывать запрос ввода пользователем точки?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
А в чем смысл...
Смысл в альтернативном завершении работы программы. Как бы предусматривается два варианта данного действия:
 1. Пользователь классически выходит из acedGetPoint.
 2. Пользователь (в момент указания точки) закрывает сопутствующее немодальное диалоговое окно.
Второй пункт вызывает вопросы.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
2. Пользователь (в момент указания точки) закрывает сопутствующее немодальное диалоговое окно.
Второй пункт вызывает вопросы.
Блокировать закрытие окна в момент запроса от пользователя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Блокировать закрытие окна в момент запроса от пользователя.
Да, согласен - это первое что приходит на ум.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Блокировать закрытие окна в момент запроса от пользователя.
Да, согласен - это первое что приходит на ум.
И это самое естественное поведение. Возможно даже прятать окно на время запросов типа acedGetXXX.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Возможно даже прятать окно на время запросов типа acedGetXXX.
Здесь замысел в другом - сбор и отображение оперативной информации в момент "пролёта над гнездом кукушки".

Отмечено как Решение Debalance 29-03-2018, 15:06:47

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Возможно даже прятать окно на время запросов типа acedGetXXX.
Здесь замысел в другом - сбор и отображение оперативной информации в момент "пролёта над гнездом кукушки".
Ну тогда в AcEdInputContextReactor::beginGetPoint следует блокировать это окно от закрытия, а в AcEdInputContextReactor::endGetPoint снимать блокировку: https://blogs.msdn.microsoft.com/oldnewthing/20100604-00/?p=13803
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Попробовал, как вариант:
Код - C++ [Выбрать]
  1. acDocManager->sendStringToExecute(acDocManager->curDocument(), L"\x3", false, true, false);
Отлично работает для моего случая.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробовал, как вариант:
Код - C++ [Выбрать]
  1. acDocManager->sendStringToExecute(acDocManager->curDocument(), L"\x3", false, true, false);
Отлично работает для моего случая.
Проверял во всех версиях AutoCAD?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Проверял во всех версиях AutoCAD?
Пока только в одной версии: 2016. Возможны подводные камни?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Возможны подводные камни?
Да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение