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

ADN Club => ObjectARX => Тема начата: Baton от 28-10-2020, 21:23:04

Название: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Baton от 28-10-2020, 21:23:04
У класса всплывающего в трее Автокада окна 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 и другие.
Название: Re: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Александр Ривилис от 28-10-2020, 23:47:00
Вот готовый тестовый проект, который я слегка переделал и проверил его работоспособность в 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. }

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



Название: Re: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Baton от 29-10-2020, 00:39:03
Спасибо большое за помощь!
Название: Re: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Baton от 05-11-2020, 21:19:38
Александр Ривилис,
есть еще один вопрос. Заметил, что BubbleWindow появляется при движении мышкой. Видимо, обрабатывается это событие. Но в примерах нигде не нашел, как отловить такое событие? Есть ли какой-нибудь реактор на движение мыши? Сейчас у меня в программе получается сделать так, что необходимость появления BubbleWindow отслеживается по итогам события AcEditorReactor::commandEnded. Но мне это не очень нравится. Но другое событие не приходит в голову.
Название: Re: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Александр Ривилис от 05-11-2020, 23:06:39
Заметил, что BubbleWindow появляется при движении мышкой.
Не понял. В том примере, который я дал, никаких движений мышкой нет.
Есть ли какой-нибудь реактор на движение мыши?
Да. Ну или acedRegisterWatchWinMsg или AcEdInputPointMonitor
Название: Re: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Baton от 05-11-2020, 23:19:27
Заметил, что BubbleWindow появляется при движении мышкой.
Это не про Ваш пример. Это про появление BubbleWindow вообще.
acedRegisterWatchWinMsg или AcEdInputPointMonitor
Попробую. Хотя AcEdInputPointMonitor уже смотрел. Кажется, это немного про другое.
Название: Re: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Александр Ривилис от 05-11-2020, 23:23:25
Это про появление BubbleWindow вообще.
Но в моём примере оно появлялось просто в момент запуска команды. С мышью ничего не происходило...
Название: Re: Callback функция в методе AcTrayItemBubbleWindowControl::SetCallback
Отправлено: Baton от 06-11-2020, 16:53:21
С мышью ничего не происходило...
Есть один момент. Я запускаю свою команду, но пока я не трону с места курсор, BubbleWindow не появляется.