Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback

Автор Тема: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback  (Прочитано 9372 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
У класса всплывающего в трее Автокада окна AcTrayItemBubbleWindowControl есть следующий метод:
Код - C++ [Выбрать]
  1. void SetCallback(
  2.     AcTrayItemBubbleWindowCallbackFunc pCallbackFunc,
  3.     AcTrayItemBubbleWindowCallbackData pCallbackData = 0
  4. );

Помогите разобраться, какой должна быть функция AcTrayItemBubbleWindowCallbackFunc. Эта функция вызывается при нажатии на BubbleWindow в трее Автокада. Как получить в этой функции Callback Return Code? Эти коды перечислены в документации ObjectArx. Но как получить к ним доступ нигде не объяснено.
Вот эти коды:
BUBBLE_WINDOW_CLOSE, BUBBLE_WINDOW_TIME_OUT, BUBBLE_WINDOW_HYPERLINK_CLICK и другие.
« Последнее редактирование: 28-10-2020, 21:25:42 от Александр Ривилис »

Отмечено как Решение Baton 29-10-2020, 00:38:15

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот готовый тестовый проект, который я слегка переделал и проверил его работоспособность в AutoCAD 2021.
Там эта callback-функция выглядит так:
Код - C++ [Выбрать]
  1. // Called when a bubble notification is closed.  
  2. // The return code indicates the close condition.  
  3. // You can customize the pData argument to suit your needs as well.
  4. static void BubbleWindowCallback(void* pData, int nReturnCode)
  5. {
  6.   CString strMsg;
  7.   switch (nReturnCode)
  8.   {
  9.   case AcTrayItemBubbleWindowControl::BUBBLE_WINDOW_ERROR_NO_CREATE:
  10.     AfxMessageBox(_T("Couldn't Create the Bubble Window!"));
  11.     break;
  12.   case AcTrayItemBubbleWindowControl::BUBBLE_WINDOW_ERROR_NO_ICONS:
  13.     AfxMessageBox(_T("No Tray Area for the Bubble Window!"));
  14.     break;
  15.   case AcTrayItemBubbleWindowControl::BUBBLE_WINDOW_ERROR_NO_NOTIFICATIONS:
  16.     AfxMessageBox(_T("No Bubble Window Notifications!"));
  17.     break;
  18.   case AcTrayItemBubbleWindowControl::BUBBLE_WINDOW_CLOSE:
  19.     acutPrintf(L"\nNotification Closed...\n");
  20.     break;
  21.   case AcTrayItemBubbleWindowControl::BUBBLE_WINDOW_TIME_OUT:
  22.     acutPrintf(L"\nNotification Timed Out...\n");
  23.     break;
  24.   case AcTrayItemBubbleWindowControl::BUBBLE_WINDOW_HYPERLINK_CLICK:
  25.     acutPrintf(L"\nHyperlink Selected...\n");
  26.     break;
  27.   }
  28.   acedPostCommandPrompt();
  29. }

Думаю, что перевод не нужен. Так это работает:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Спасибо большое за помощь!

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Александр Ривилис,
есть еще один вопрос. Заметил, что BubbleWindow появляется при движении мышкой. Видимо, обрабатывается это событие. Но в примерах нигде не нашел, как отловить такое событие? Есть ли какой-нибудь реактор на движение мыши? Сейчас у меня в программе получается сделать так, что необходимость появления BubbleWindow отслеживается по итогам события AcEditorReactor::commandEnded. Но мне это не очень нравится. Но другое событие не приходит в голову.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
Заметил, что BubbleWindow появляется при движении мышкой.
Это не про Ваш пример. Это про появление BubbleWindow вообще.
acedRegisterWatchWinMsg или AcEdInputPointMonitor
Попробую. Хотя AcEdInputPointMonitor уже смотрел. Кажется, это немного про другое.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Это про появление BubbleWindow вообще.
Но в моём примере оно появлялось просто в момент запуска команды. С мышью ничего не происходило...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 3
С мышью ничего не происходило...
Есть один момент. Я запускаю свою команду, но пока я не трону с места курсор, BubbleWindow не появляется.