ObjectARX, AutoCAD. Среда программирования библиотеки C++

Ответ на Сообщения AutoCAD


Имеются четыре категории сообщений, что AutoCAD посылает приложениям ObjectARX:

·         Сообщения, которые посланы всем приложениям

·         Сообщения, которые посланы только если  приложение имеет зарегистрированную  Alisp-функцию с acedDefun()

·         Сообщения, которые посланы приложениям, которые зарегистрированы как сервисы  ObjectARX

·         Сообщения, отвечающие приложениям, которые используют ActiveX Автоматизацию

Следующие пять таблиц описывают сообщения, что AutoCAD посылает toObjectARX приложению. Первая таблица перечисляет сообщения, посланные всем приложениям.

Сообщения, посланные всем приложениям Message

Сообщение

Описание



KInitAppMsg

Посланный, когда приложение ObjectARX загружено, чтобы открыть связь между AutoCAD и приложением.

KUnloadAppMsg

Посланный, когда приложение ObjectARX разгруженно (или когда пользователь разгружает приложение или когда сам AutoCAD закончен). Закрывает файлы и исполняет операции очистки.

KLoadDwgMsg

Посланным однажды, когда рисунок открыт. Тогда, если приложение регистрируется, любые функции с Автошепелявят, AutoCAD посылает это сообщение однажды за каждый рисунок, загруженный в редактора. Редактор AutoCAD полностью инициализирован в этом точке, и все глобальные функции доступны. Однако, Вы не можете использовать acedCommand () функция от kLoadDwgMsg

KPreQuitMsgSent,

когда AutoCAD выходит, но прежде, чем это начинает разгружать все приложения ObjectARX..

Следующая таблица перечисляет сообщения, что AutoCAD посылает приложениям, которые имеют буферизованный функцию AutoLISP с acedDefun ():

Сообщение

Описание

kUnloadDwgMsg

Посланный, когда пользователь выходит из сеанса рисунка.

kInvkSubrMsg

Посланным, чтобы вызвать функции буферизованное использование acedDefun ().

kEendMsg

Посланным только, когда команда END введена и имеются изменения(замены), которые должны быть сохранены (когда dbmod! = 0). KEndMsg не послан для НОВОГО или ОТКРЫТОГО, вместо этого, kSaveMsg и kLoadDwgMsg посланы. В течение КОНЦА, если dbmod = 0, то kQuitMsg послан вместо kEndMsg.

kQuitMsg

когда выход из AutoCAD (заканчивается без того, чтобы сохранить рисунок потому что QUIT команда была введена. KQuitMsg может также быть получен с командой END, как отмечено выше.

Если команда END послана и dbmod = 0, то kQuitMsg послан.

kSaveMsg

когда AutoCAD сохраняет рисунок потому что SAVE

SAVEAS, NEW или команда OPEN введены.

kCcfgMsgSent

когда AutoCAD возвращается от программы конфигурации, и используемый только для изменения драйвера дисплея.

<
Следующая таблица перечисляет сообщения, что приложение получает, если это имеет зарегистрированный сервис с ObjectARX.

Сообщение
Описание
KDependencyMsg
когда приложение ObjectARX имеет буферизованный объект AcRxService и индекс зависимости на тех сервисных изменениях от 0 до 1.
KNoDependencyMsgSent
когда приложение ObjectARX имеет буферизованный объект AcRxService и индекс зависимости на тех сервисных изменениях от 1 до 0.

Следующая таблица перечисляет сообщения, что приложение должно ответить к тому, если это использует ActiveX Автоматизацию. См. главу 23, “ ОБЩАЯ ОБЪЕКТНАЯ МОДЕЛЬ, ActiveX Автоматизация, и Объектный Менеджер Свойства. ”

Сообщение
Описание
kOleUnloadAppMsg
Посылается, чтобы определить, может ли приложение быть выгружено (то есть ни один из его объектов ActiveX или интерфейсов не упомянут другими приложениями).

См. rxdefs.h файл, где эти константы перечисления определены в соответствии с объявлением типа AppMsgCode. Вы будете должны решить, на которые сообщения ваше приложение ObjectARX ответит.
Следующая таблица описывает рекомендуемые действия после получения данного сообщения. ObjectARX прикладные реакции на сообщения AutoCAD

Сообщение
Рекомендуемые действия
kInitAppMsg
Регистрируйте услуги, классы, AcEd команды и реакторы,  AcRxDynamicLinker реакторы. Инициализируйте системные ресурсы приложения типа устройств и окон.
Исполните всю одноразовую раннюю инициализацию.
AcRx, AcEd, и AcGe весь активен. Сохраните значение pkt параметра, если Вы хотите разблокировать и повторно блокировать ваше приложение. Не ожидайте, что драйверы устройства будут инициализированы, любые ресурсы интерфейса пользователя быть активными, приложения, которые будут загружены в специфическом порядке, будут автошепелявить, чтобы присутствовать, или любые базы данных, чтобы быть открытыми. Запросы, возводящие в степень любое из этих предположений приведут к состоянию ошибки, иногда фатальному.
AcDb и AcGi библиотеки вообще еще не активен, хотя связано AcRx, и другие структуры на месте
KUnloadAppMsg
Исполняют заключительную системную очистку ресурса. Что-нибудь начатое или созданное в kInitAppMsg должно теперь быть остановлено или разрушено. Не ожидайте вещи быть любой отличным от описания kInitAppMsg. AutoCAD мог быть главным образом демонтирован к времени, этот запрос сделан, если бы не перечисленные библиотеки, поскольку активный в kInitAppMsg Делают описание.
KOleUnloadAppMsg
Это сообщение нужно ответить только приложениями, использующими ActiveX Автоматизацию.
Ответьте с AcRx:: kRetOK, если приложение может быть вызгружено (ни один из его объектов ActiveX или интерфейсов не упомянут другими приложениями). Если это не может быть выгружено, отвечать с AcRx:: kRetError.
KLoadDwgMsg
исполняют инициализацию, уместную текущему рисунку сеанса редактирования. AcDb, AcGi, и интерфейс пользователя API - все теперь активные.
Было ли что - нибудь сделано к рисунку, не определен.
Все Снабженные автохамом API теперь активны. Вы можете исполнять регистрацию функции AutoLISP в это время, и инициализировать интерфейс пользователя. Другие операции, чтобы исполнить теперь включают поллинг драйверы AutoCAD и запрос AcEditorReactor события, если Вы хотите самый ранний возможный доступ к acdbHostApplicationServices()->workingDatabase().
Не Делайте что - нибудь, что Вы не хотели бы случиться для каждого рисунка сеанс редактирования. Предположите, что это сообщение послано больше чем однажды в выполнение программы.
KUnloadDwgMsg
выпускают или очищают все начатое или буферизованный в ответ на код kLoadDwgMsg. Выпустите все AcDb реакторы, исключая постоянные реакторы.
Не выпустите системные ресурсы, которые не связаны к сеансу редактирования, или очищают классы AcRx, AcEd реакторы, или команды; они остаются правильными(допустимыми) поперек сеансов редактирования.
KDependencyMsg
исполняют любые действия, которые являются необходимыми для вашего приложения, когда другие приложения станут зависящий от этого, типа блокировки вашего приложения так, чтобы это не могло быть разгруженно.
KNoDependencyMsg
исполняют любые действия, которые являются необходимыми для вашего приложения, когда имеются больше не никакие другие приложения, зависящие вашего, типа разблокирования вашего приложения так, чтобы это могло быть разгруженно пользователем если желательно.
KInvkSubrMsg
вызывают функции, буферизованные с acedDefun (). Определите функцию,  звоня по телефону к acedGetFuncode (). Возвращаемые значения с acedRetxxx ().
Не Делайте много здесь кроме функционального обращения.
KPreQuitMsg
разгружают любые зависимости (приложения, DLLs, и так далее) который ваше приложение управляет, чтобы гарантировать, что они являются разгруженным before your приложением.
kEndMsg
kCfgMsg
kQuitMsg
kSaveMsg
Рассмотрите использование AcEditorReactor повторных вызовов случая как альтернатива к ответу на эти сообщения. Не ответьте на эти сообщения, если вы отвечаете на эквивалентные повторные вызовы случая, сделанные через AcEditorReactor.
Содержание раздела