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

ADN Club => ObjectARX => Тема начата: Paravozzz от 20-07-2019, 23:21:22

Название: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Paravozzz от 20-07-2019, 23:21:22
Добрый день!

У меня есть диалоговое окно в Автокад 2015-2016. С эти окном есть несколько "проблем".
При нажатии кнопки Esc окно пропадает. Я переопределил метод OnCancel - сделал его пустым.
Окно при нажатии Esc пропадать перестало. Но также перестали работать любые действия, связанные с кнопкой Esc, например, при редактировании текста элемента в CTreeCtrl, выйти из режима редактирования можно только нажав мышью в произвольном месте формы.
Как можно "объяснить" диалоговому окну, что не надо реагировать на кнопку Esc, но в тоже время оставить Esc работающим для остальных элементов окна.

Та же самая история с кнопкой Enter.
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Александр Ривилис от 20-07-2019, 23:27:54
Paravozzz,
1. Это ObjectARX?
2. Это модальное окно?
3. Какой базовый класс у окна?
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Александр Ривилис от 20-07-2019, 23:31:33
На всякий случай посмотри вот это: http://netcode.ru/cpp/?artID=2553
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Paravozzz от 20-07-2019, 23:48:18
Paravozzz,
1. Это ObjectARX?
2. Это модальное окно?
3. Какой базовый класс у окна?
Александр,
1. Окно модальное. По крайней мере взываю я его с флагом ACRX_CMD_MODAL.
2. Это ObjectARX.
3. class MainForm : public CAdUiBaseDialog
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Александр Ривилис от 20-07-2019, 23:52:26
2. Это ObjectARX.
Тему перенёс в соответствующий раздел.
1. Окно модальное. По крайней мере взываю я его с флагом ACRX_CMD_MODAL.
Флаг ACRX_CMD_MODAL к модальности диалогового окна не имеет никакого отношения. Отношение имеет тот факт вызывается ли это окно через метод DoModal или нет.
3. class MainForm : public CAdUiBaseDialog
Тогда приведенная мной выше ссылка теоретически должна помочь.
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Paravozzz от 20-07-2019, 23:58:58
Флаг ACRX_CMD_MODAL к модальности диалогового окна не имеет никакого отношения. Отношение имеет тот факт вызывается ли это окно через метод DoModal или нет.

Поправка - окно не модальное.
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Александр Ривилис от 21-07-2019, 00:00:58
Флаг ACRX_CMD_MODAL к модальности диалогового окна не имеет никакого отношения. Отношение имеет тот факт вызывается ли это окно через метод DoModal или нет.

Поправка - окно не модальное.
Т.е. оно висит постоянно и ты можешь при открытом этом окне работать с редактором AutoCAD?
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Paravozzz от 21-07-2019, 00:14:54
Т.е. оно висит постоянно и ты можешь при открытом этом окне работать с редактором AutoCAD?
Да. Вызываю его вот так.

acrxEntryPoint.cpp:
Код - C++ [Выбрать]
  1. extern MainForm * g_pMainForm;
  2. static void ArxVolumeGroupArxVolume ()
  3.         {
  4.                 if (!FunctionsCommon::CheckUsers())
  5.                 {
  6.                         return;
  7.                 }
  8.  
  9.                 if (!g_pMainForm)
  10.                 {
  11.                         CAcModuleResourceOverride resOverride;
  12.                         g_pMainForm = new MainForm;
  13.                         g_pMainForm->Create(IDD_MAINFORM);
  14.                         g_pMainForm->ShowWindow(SW_SHOWNORMAL);
  15.                        
  16.                 }
  17.                 else
  18.                 {
  19.                        
  20.                         // Если окно невидимо или свернуто, его следует показать
  21.                         if (!g_pMainForm->IsWindowVisible() || g_pMainForm->IsIconic() )
  22.                         {
  23.                                 g_pMainForm->ShowWindow(SW_SHOWNORMAL);
  24.                         }
  25.                         else
  26.                         {
  27.                                 g_pMainForm->FlashWindowEx(FLASHW_ALL, 8, 80);
  28.                         }
  29.                 }
  30.                 acedRetVoid ();
  31.         }
  32.  
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Александр Ривилис от 21-07-2019, 00:17:00
Да. Вызываю его вот так.
Да. Это немодальное окно.
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Александр Ривилис от 21-07-2019, 00:20:36
Короче говоря как указано по ссылке определи PreTranslateMessage для диалога с отдельной обработкой VK_RETURN и VK_ESCAPE. И кроме того переопредели обработчик TWM_ENDLABELEDIT для CTreeCtrl.
Название: Re: Взаимодействие с диалоговым окном С++ MFC
Отправлено: Paravozzz от 21-07-2019, 01:50:00
Короче говоря как указано по ссылке определи PreTranslateMessage для диалога с отдельной обработкой VK_RETURN и VK_ESCAPE. И кроме того переопредели обработчик TWM_ENDLABELEDIT для CTreeCtrl.
Александр, спасибо! Помогло.