Взаимодействие с диалоговым окном С++ MFC

Автор Тема: Взаимодействие с диалоговым окном С++ MFC  (Прочитано 10686 раз)

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

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Добрый день!

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

Та же самая история с кнопкой Enter.

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

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

Отмечено как Решение Paravozzz 21-07-2019, 01:49:03

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
На всякий случай посмотри вот это: http://netcode.ru/cpp/?artID=2553
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Paravozzz,
1. Это ObjectARX?
2. Это модальное окно?
3. Какой базовый класс у окна?
Александр,
1. Окно модальное. По крайней мере взываю я его с флагом ACRX_CMD_MODAL.
2. Это ObjectARX.
3. class MainForm : public CAdUiBaseDialog

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
2. Это ObjectARX.
Тему перенёс в соответствующий раздел.
1. Окно модальное. По крайней мере взываю я его с флагом ACRX_CMD_MODAL.
Флаг ACRX_CMD_MODAL к модальности диалогового окна не имеет никакого отношения. Отношение имеет тот факт вызывается ли это окно через метод DoModal или нет.
3. class MainForm : public CAdUiBaseDialog
Тогда приведенная мной выше ссылка теоретически должна помочь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Флаг ACRX_CMD_MODAL к модальности диалогового окна не имеет никакого отношения. Отношение имеет тот факт вызывается ли это окно через метод DoModal или нет.

Поправка - окно не модальное.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Флаг ACRX_CMD_MODAL к модальности диалогового окна не имеет никакого отношения. Отношение имеет тот факт вызывается ли это окно через метод DoModal или нет.

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

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Т.е. оно висит постоянно и ты можешь при открытом этом окне работать с редактором 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.  

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

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

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

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

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Короче говоря как указано по ссылке определи PreTranslateMessage для диалога с отдельной обработкой VK_RETURN и VK_ESCAPE. И кроме того переопредели обработчик TWM_ENDLABELEDIT для CTreeCtrl.
Александр, спасибо! Помогло.